From 248a1e1cfc36673fbdf673323fed7814256acebc Mon Sep 17 00:00:00 2001 From: Edoardo Ferrari <43927507+archetipico@users.noreply.github.com> Date: Tue, 14 Apr 2026 11:37:23 +0200 Subject: [PATCH 1/3] new version --- .github/workflows/ci.yml | 34 + CONTRIBUTING.md | 111 ++- README.md | 1125 ++++++++++++++++++++++++++-- VERSION | 1 + completions/_up | 74 ++ completions/up.bash | 30 + completions/up.fish | 38 + doc/documentation.pdf | Bin 103726 -> 217082 bytes doc/documentation.tex | 749 +++++++++++++++--- man/up.1 | 85 +++ setup.ps1 | 69 ++ setup.sh | 143 +++- share/plugins/example.sh | 23 + share/profiles/home.ps1 | 2 + share/profiles/home.sh | 5 + share/profiles/safe.ps1 | 5 + share/profiles/safe.sh | 6 + share/profiles/server.ps1 | 8 + share/profiles/server.sh | 10 + share/profiles/work.ps1 | 5 + share/profiles/work.sh | 6 + src/emerger.ps1 | 178 +++++ src/emerger.sh | 376 ++++++++-- src/lib/args.sh | 155 ++++ src/lib/changelog.sh | 36 + src/lib/clean.sh | 70 ++ src/lib/diff.sh | 83 ++ src/lib/disk.sh | 24 + src/lib/doctor.sh | 109 +++ src/lib/estimate.sh | 21 + src/lib/help.txt | 95 +++ src/lib/hooks.sh | 20 + src/lib/ignore.sh | 33 + src/lib/lock.sh | 22 + src/lib/log.sh | 21 + src/lib/metrics.sh | 62 ++ src/lib/mirrors.sh | 33 + src/lib/notify.sh | 15 + src/lib/packages.sh | 337 +++++++++ src/lib/plugins.sh | 78 ++ src/lib/profiles.sh | 49 ++ src/lib/progress.sh | 37 + src/lib/reboot.sh | 48 ++ src/lib/report.sh | 37 + src/lib/resume.sh | 30 + src/lib/retry.sh | 25 + src/lib/run.sh | 65 ++ src/lib/snapshot.sh | 81 ++ src/lib/summary.sh | 160 ++++ src/lib/sys.sh | 59 ++ src/lib/tui.sh | 54 ++ src/lib/ui.sh | 220 ++++++ src/lib/update.sh | 78 ++ src/lib/wizard.sh | 32 + src/logo/logo.txt | 6 + src/package/Linux/arch.sh | 25 - src/package/Linux/debian.sh | 66 -- src/package/Linux/flatpak.sh | 21 - src/package/Linux/gentoo.sh | 22 - src/package/Linux/nix.sh | 17 - src/package/Linux/opensuse.sh | 25 - src/package/Linux/rpm.sh | 39 - src/package/Linux/snap.sh | 13 - src/package/Linux/termux.sh | 21 - src/package/MacOS/MacOSUpdate.sh | 29 - src/package/Windows/privileges.ps1 | 3 - src/package/Windows/winUpdate.ps1 | 48 -- src/pslib/Args.ps1 | 107 +++ src/pslib/Clean.ps1 | 54 ++ src/pslib/Doctor.ps1 | 45 ++ src/pslib/Help.txt | 70 ++ src/pslib/Hooks.ps1 | 18 + src/pslib/Log.ps1 | 25 + src/pslib/Notify.ps1 | 13 + src/pslib/Packages.ps1 | 148 ++++ src/pslib/Profiles.ps1 | 45 ++ src/pslib/Summary.ps1 | 130 ++++ src/pslib/Sys.ps1 | 55 ++ src/pslib/UI.ps1 | 115 +++ src/pslib/Update.ps1 | 54 ++ src/test/argument_check.sh | 29 - src/test/integrity_check.sh | 71 -- src/test/list/.packages | 9 - src/test/list/.tests | 1 - src/test/list/.utils | 7 - src/utils/.logo | 15 - src/utils/cache.sh | 19 - src/utils/cache_gen.sh | 64 -- src/utils/check_pwr.sh | 8 - src/utils/global.sh | 65 -- src/utils/help | 10 - src/utils/privileges.sh | 12 - src/utils/trash.sh | 19 - tests/emerger.bats | 91 +++ uninstall.ps1 | 45 ++ uninstall.sh | 69 +- update.ps1 | 5 + update.sh | 25 +- 98 files changed, 5992 insertions(+), 1058 deletions(-) create mode 100644 .github/workflows/ci.yml create mode 100644 VERSION create mode 100644 completions/_up create mode 100644 completions/up.bash create mode 100644 completions/up.fish create mode 100644 man/up.1 create mode 100644 setup.ps1 create mode 100644 share/plugins/example.sh create mode 100644 share/profiles/home.ps1 create mode 100644 share/profiles/home.sh create mode 100644 share/profiles/safe.ps1 create mode 100644 share/profiles/safe.sh create mode 100644 share/profiles/server.ps1 create mode 100644 share/profiles/server.sh create mode 100644 share/profiles/work.ps1 create mode 100644 share/profiles/work.sh create mode 100644 src/emerger.ps1 create mode 100644 src/lib/args.sh create mode 100644 src/lib/changelog.sh create mode 100644 src/lib/clean.sh create mode 100644 src/lib/diff.sh create mode 100644 src/lib/disk.sh create mode 100644 src/lib/doctor.sh create mode 100644 src/lib/estimate.sh create mode 100644 src/lib/help.txt create mode 100644 src/lib/hooks.sh create mode 100644 src/lib/ignore.sh create mode 100644 src/lib/lock.sh create mode 100644 src/lib/log.sh create mode 100644 src/lib/metrics.sh create mode 100644 src/lib/mirrors.sh create mode 100644 src/lib/notify.sh create mode 100644 src/lib/packages.sh create mode 100644 src/lib/plugins.sh create mode 100644 src/lib/profiles.sh create mode 100644 src/lib/progress.sh create mode 100644 src/lib/reboot.sh create mode 100644 src/lib/report.sh create mode 100644 src/lib/resume.sh create mode 100644 src/lib/retry.sh create mode 100644 src/lib/run.sh create mode 100644 src/lib/snapshot.sh create mode 100644 src/lib/summary.sh create mode 100644 src/lib/sys.sh create mode 100644 src/lib/tui.sh create mode 100644 src/lib/ui.sh create mode 100644 src/lib/update.sh create mode 100644 src/lib/wizard.sh create mode 100644 src/logo/logo.txt delete mode 100755 src/package/Linux/arch.sh delete mode 100755 src/package/Linux/debian.sh delete mode 100755 src/package/Linux/flatpak.sh delete mode 100755 src/package/Linux/gentoo.sh delete mode 100755 src/package/Linux/nix.sh delete mode 100755 src/package/Linux/opensuse.sh delete mode 100755 src/package/Linux/rpm.sh delete mode 100755 src/package/Linux/snap.sh delete mode 100755 src/package/Linux/termux.sh delete mode 100644 src/package/MacOS/MacOSUpdate.sh delete mode 100644 src/package/Windows/privileges.ps1 delete mode 100644 src/package/Windows/winUpdate.ps1 create mode 100644 src/pslib/Args.ps1 create mode 100644 src/pslib/Clean.ps1 create mode 100644 src/pslib/Doctor.ps1 create mode 100644 src/pslib/Help.txt create mode 100644 src/pslib/Hooks.ps1 create mode 100644 src/pslib/Log.ps1 create mode 100644 src/pslib/Notify.ps1 create mode 100644 src/pslib/Packages.ps1 create mode 100644 src/pslib/Profiles.ps1 create mode 100644 src/pslib/Summary.ps1 create mode 100644 src/pslib/Sys.ps1 create mode 100644 src/pslib/UI.ps1 create mode 100644 src/pslib/Update.ps1 delete mode 100755 src/test/argument_check.sh delete mode 100755 src/test/integrity_check.sh delete mode 100644 src/test/list/.packages delete mode 100644 src/test/list/.tests delete mode 100644 src/test/list/.utils delete mode 100644 src/utils/.logo delete mode 100755 src/utils/cache.sh delete mode 100755 src/utils/cache_gen.sh delete mode 100755 src/utils/check_pwr.sh delete mode 100755 src/utils/global.sh delete mode 100644 src/utils/help delete mode 100755 src/utils/privileges.sh delete mode 100755 src/utils/trash.sh create mode 100644 tests/emerger.bats create mode 100644 uninstall.ps1 create mode 100644 update.ps1 diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..899ce25 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,34 @@ +name: CI +on: + push: + branches: [main, dev] + pull_request: + +jobs: + shellcheck: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: Install shellcheck + run: sudo apt-get update && sudo apt-get install -y shellcheck + - name: Lint (errors) + run: | + shopt -s globstar nullglob + shellcheck -S error \ + setup.sh uninstall.sh update.sh \ + src/emerger.sh src/lib/*.sh + - name: Lint (warnings, non-blocking) + run: | + shopt -s globstar nullglob + shellcheck -S warning \ + setup.sh uninstall.sh update.sh \ + src/emerger.sh src/lib/*.sh || true + + tests: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: Install bats + run: sudo apt-get update && sudo apt-get install -y bats + - name: Run bats + run: bats tests/ diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 14dc49c..0c95530 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,59 +1,52 @@ -Contributions to this project are very appreciated, though we require some formalisms: -
    -
  1. - You are not required to explain everything you did inside code comments. But when you are creating code that spans between multiple files, or it requires more than basic knowledge to be understood, help everyone understand what you are doing by leaving small comments inside your code or by explaining the stream of consciousness inside the pull request. -
  2. -
  3. - When creating a pull request, point to an issue or explain what you did using few words (this is an extension of what was said in rule 1). -
  4. -
  5. - Not following step 1 and step 2, will not exclude your contribution but it will slow the development process because we will have to make questions before accepting your request. -
  6. -
  7. - We will not accept contributions containing shady code or any form of crime.
    - Examples of shady code is, but not limited to: - - Examples of crimes are, but not limited to: - -
  8. -
  9. - It's not mandatory, but try to follow the already existing code indentation. -
  10. -
  11. - Since we believe in a friendly enviroment, memes are permitted in comments. Just don't abuse them and respect rule 4. -
  12. -
  13. - You can contribute using your licensed code, though we will have to check few things before: -
      -
    1. - You are the real author -
    2. -
    3. - The contribution respects rule 4 -
    4. -
    5. - If you propose someone else's code to be integrated, the integration will have to respect the author's needs and will. Basically we have to respect its license. -
    6. -
    -
  14. -
  15. - Last but not least, no one on this planet is born knowning everything. If you respect all the rules above but your pull request is rejected because of the nature of your code, your contribution will not be vain. Your help may give someone else ideas, or the possibility to refactor your code and make it more readable. This is the meaning of open source. Also remember that even us, the creators, started all of this knowing almost nothing, so don't be afraid to be judged. -
  16. -
      \ No newline at end of file +# Contributing + +First of all, thanks for being here! Contributions are very appreciated, but we ask you to follow a few simple rules so everyone can enjoy the ride. + +## 1. Comment your code (just a little) + +You don't need to explain every single line. But if your change spans multiple files, or it takes more than basic knowledge to understand, please leave a few small comments or share your stream of consciousness in the pull request. Future us (and you) will be grateful. + +## 2. Write meaningful pull requests + +When opening a PR, link to an issue or describe what you did in a few words. Think of it as an extension of rule 1. + +## 3. About rules 1 and 2 + +Skipping them won't get your contribution rejected, but it will slow things down, since we'll have to ask questions before merging. + +## 4. No shady code, no crimes + +We will not accept contributions containing *shady code* or any form of *crime*. + +Examples of *shady code* (not limited to): + +- References and links to servers we don't own or that are not certified +- Exposing users to external or internal vulnerabilities +- Code tricks to bypass privileges or access reserved memory areas + +Examples of *crimes* (not limited to): + +- Discrimination based on ethnicity, sex, religion, physical aspect, sexual orientation, or any other individual right protected by Human Rights or by simple logic and maturity +- Cybercrimes + +## 5. Mind the indentation + +Not mandatory, but please try to match the existing code style. It keeps the codebase tidy. + +## 6. Memes are welcome + +We believe in a friendly environment, so memes in comments are totally fine. Just don't overdo it, and always respect rule 4. + +## 7. Licensed code + +You can contribute with your licensed code, but we'll have to check a few things first: + +1. You are the real author. +2. The contribution respects rule 4. +3. If you propose someone else's code, the integration must respect the author's needs and license. + +## 8. Don't be afraid + +No one on this planet is born knowing everything. If you follow all the rules above but your PR gets rejected because of the nature of your code, your effort won't be in vain: your work may give someone else ideas, or the chance to refactor it into something even better. That's the beauty of open source. + +And remember, even us, the creators, started out knowing almost nothing. So really, don't be afraid of being judged. Just jump in. diff --git a/README.md b/README.md index 7aaecae..69af492 100644 --- a/README.md +++ b/README.md @@ -1,86 +1,1047 @@ -[![code_size](https://img.shields.io/github/languages/code-size/MasterCruelty/eMerger)](https://img.shields.io/github/languages/code-size/MasterCruelty/eMerger) +# eMerger + +[![CI](https://github.com/MasterCruelty/eMerger/actions/workflows/ci.yml/badge.svg)](https://github.com/MasterCruelty/eMerger/actions/workflows/ci.yml) [![Lines of Code](https://sonarcloud.io/api/project_badges/measure?project=TheMergers_eMerger&metric=ncloc)](https://sonarcloud.io/summary/new_code?id=TheMergers_eMerger) -[![issues](https://img.shields.io/github/issues/MasterCruelty/eMerger)](https://img.shields.io/github/issues/MasterCruelty/eMerger) -[![top_language](https://img.shields.io/github/languages/top/MasterCruelty/eMerger)](https://img.shields.io/github/languages/top/MasterCruelty/eMerger) -[![Maintainability Rating](https://sonarcloud.io/api/project_badges/measure?project=TheMergers_eMerger&metric=sqale_rating)](https://sonarcloud.io/summary/new_code?id=TheMergers_eMerger) -[![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=TheMergers_eMerger&metric=alert_status)](https://sonarcloud.io/summary/new_code?id=TheMergers_eMerger) -[![commit_activity](https://img.shields.io/github/commit-activity/w/MasterCruelty/eMerger)](https://img.shields.io/github/commit-activity/w/MasterCruelty/eMerger) -[![commits_since_release](https://img.shields.io/github/commits-since/MasterCruelty/emerger/latest?color=44CC11&style=flat-square)](https://img.shields.io/github/commits-since/MasterCruelty/emerger/latest?color=44CC11&style=flat-square) - -

      eMerger

      +[![Maintainability](https://sonarcloud.io/api/project_badges/measure?project=TheMergers_eMerger&metric=sqale_rating)](https://sonarcloud.io/summary/new_code?id=TheMergers_eMerger) +

      - logo + eMerger logo

      -

      What is it?

      -eMerger is a simple script to clean update your system and your packages by just typing up in your terminal!
      - -

      Systems tested and working

      - - -

      Systems tested and not working (help wanted)

      - - -

      Supported package managers

      - - ---- - -

      Install

      -
        -
      1. Run ./setup.sh
      2. -
      3. Run up
      4. -
      -If you cloned using root privileges, and you want to execute without them, remember to run: sudo chown -R yourusername . -

      Uninstall

      -
        -
      1. Run ./uninstall.sh
      2. -
      -

      Update

      -You have three options: -
        -
      1. Run ./update.sh
      2. -
      3. Run up -up
      4. -
      5. Run up -au to set a cronjob
      6. -
      -

      Usage

      -eMerger comes with inline arguments: just type up -help to explore them. - ---- - -

      Contribute

      -How to contribute
      -

      Issue

      -Is there a problem? 🖥️
      -Your package manager is not listed? 🖥️
      -Feel free to open an issue. Try to explain exactly what happens and if possible post errors or outputs you managed to retrieve.
      -

      License

      - This project license can be found in ./LICENSE -

      External projects used

      -wttr.in +**One command - `up` - refreshes, upgrades and cleans your whole system.** +Works on **Linux**, **macOS** and **Windows**. Auto-detects every package +manager you have, runs them in the right order, gives you one clean summary +at the end. No YAML, no daemons. + +--- + +## Table of contents + +1. [Platforms at a glance](#platforms-at-a-glance) +2. [Quickstart](#quickstart) +3. [Requirements](#requirements) +4. [Installation](#installation) + - [Linux](#install-linux) + - [macOS](#install-macos) + - [Windows](#install-windows) +5. [Uninstallation](#uninstallation) +6. [Update / self-update](#update--self-update) +7. [User manual](#user-manual) + - [Running](#running) + - [Flags, quick reference](#flags-quick-reference) + - [Combining flags](#combining-flags) + - [Interactive mode](#interactive-mode) + - [Dry-run & verbose](#dry-run--verbose) + - [Quiet levels](#quiet-levels) + - [Security-only updates](#security-only-updates) + - [Dev toolchains](#dev-toolchains) + - [Firmware (Linux)](#firmware-linux) + - [Parallel mode](#parallel-mode) + - [Snapshots (Linux)](#snapshots-linux) + - [Mirrors refresh (Linux)](#mirrors-refresh-linux) + - [Reboot handling](#reboot-handling) + - [Resume after interruption](#resume-after-interruption) + - [Package diff & changelog](#package-diff--changelog) + - [Reports](#reports) + - [History & errors](#history--errors) + - [Doctor](#doctor) +8. [Configuration](#configuration) + - [config file](#config-file) + - [Profiles](#profiles) + - [Hooks](#hooks) + - [Ignore list (Linux)](#ignore-list-linux) + - [Quiet hours](#quiet-hours) + - [Manager plugins](#manager-plugins) +9. [Integration](#integration) + - [JSON output](#json-output) + - [Prometheus metrics](#prometheus-metrics) + - [Reboot exit code](#reboot-exit-code) + - [Download-only / offline](#download-only--offline) + - [Manager filtering](#manager-filtering) + - [Rollback](#rollback) + - [Short flag bundling](#short-flag-bundling) +10. [Auto-update (unattended)](#auto-update-unattended) +11. [Files & paths](#files--paths) +12. [Supported package managers](#supported-package-managers) +13. [Exit codes](#exit-codes) +14. [Troubleshooting](#troubleshooting) +15. [Development](#development) +16. [License](#license) + +--- + +## Platforms at a glance + +| | Linux | macOS | Windows | +|---|---|---|---| +| Entry point | `src/emerger.sh` | `src/emerger.sh` | `src/emerger.ps1` | +| Shell | bash 3.2+ | bash 3.2+ (system default) | PowerShell 5.1+ | +| Setup | `./setup.sh` | `./setup.sh` | `.\setup.ps1` | +| Uninstall | `./uninstall.sh` | `./uninstall.sh` | `.\uninstall.ps1` | +| Auto-update | systemd user timer / cron | launchd-compat cron | Task Scheduler | +| Elevation | `sudo` | `sudo` | UAC relaunch | +| Config dir | `~/.config/emerger/` | `~/.config/emerger/` | `%APPDATA%\emerger\` | +| State dir | `~/.local/state/emerger/` | `~/.local/state/emerger/` | `%LOCALAPPDATA%\emerger\state\` | + +Feature parity is kept for the core flow (detect → upgrade → clean → summary). +Platform-specific features are documented below. + +--- + +## Quickstart + +**Linux / macOS** +```sh +git clone https://github.com/MasterCruelty/eMerger +cd eMerger +./setup.sh +# open a new shell (or: source ~/.bashrc) +up --help +up -n +up +``` + +**Windows** (PowerShell) +```powershell +git clone https://github.com/MasterCruelty/eMerger +cd eMerger +.\setup.ps1 +# open a new PowerShell window (or: . $PROFILE) +up --help +up -n +up +``` + +--- + +## Requirements + +**Linux** +- bash ≥ 3.2, coreutils, git, sudo. +- Optional: `gum`/`whiptail`, `notify-send`, `curl`, `flock`, `reflector`, + `netselect-apt`, `snapper`/`timeshift`/`btrfs-progs`, `fwupdmgr`. + +**macOS** +- bash ≥ 3.2 (the system `/bin/bash` works out of the box; no Homebrew bash needed). +- Xcode Command Line Tools (for git). +- Optional: Homebrew, `mas` (`brew install mas`). + +**Windows** +- PowerShell 5.1 (built-in on Win10+) or 7+. +- Git for Windows (for `up --self-update`). +- Optional: `winget`, `scoop`, `choco`, `PSWindowsUpdate` + (`Install-Module PSWindowsUpdate -Scope CurrentUser`), `BurntToast` + (`Install-Module BurntToast`) for toast notifications. + +eMerger never installs these for you - it only uses what's there. + +--- + +## Installation + +### Install (Linux) + +```sh +git clone https://github.com/MasterCruelty/eMerger +cd eMerger +./setup.sh +``` + +`setup.sh` does exactly this: + +1. Adds `alias up='bash /path/to/eMerger/src/emerger.sh'` to your shell rc + (bash, zsh, fish - whichever you use). +2. Makes `src/emerger.sh` executable. +3. Installs shell completions under: + - `~/.local/share/bash-completion/completions/up` + - `~/.zsh/completions/_up` + - `~/.config/fish/completions/up.fish` +4. Creates `~/.config/emerger/{config.sh,ignore.list,hooks/,profiles.d/}`. + +After install, **open a new shell** (or `source ~/.bashrc`). + +### Install (macOS) + +Identical script, same flow: + +```sh +git clone https://github.com/MasterCruelty/eMerger +cd eMerger +./setup.sh +``` + +macOS specifics handled automatically: +- The alias is written to `~/.zshrc` first (zsh is the default shell since Catalina). +- If Homebrew is installed, completions go to + `$(brew --prefix)/etc/bash_completion.d/` and + `$(brew --prefix)/share/zsh/site-functions/`. +- `softwareupdate` (native macOS updater) is auto-detected alongside `brew`, + `brew --cask`, and `mas`. + +### Install (Windows) + +```powershell +git clone https://github.com/MasterCruelty/eMerger +cd eMerger +.\setup.ps1 +``` + +`setup.ps1` does: + +1. Sets `ExecutionPolicy` to `RemoteSigned` for `CurrentUser` if it was + `Restricted` or `Undefined`. No admin needed for this. +2. Adds a `function up { & "…\emerger.ps1" @args }` block to your + `$PROFILE.CurrentUserAllHosts` (so `up` works from any host: cmd-hosted + PS, ISE, Terminal…). +3. Scaffolds `%APPDATA%\emerger\{config.ps1,hooks\,profiles.d\}`. + +After install, **open a new PowerShell window** (or `. $PROFILE`). + +> **Important**: `setup.ps1` does **not** require admin. Package manager +> runs that need admin will trigger a UAC prompt via automatic elevation. + +### Manual install + +All three platforms: just point an alias/function at the entry point. + +```sh +# bash/zsh/fish - macOS or Linux +alias up='bash /absolute/path/to/eMerger/src/emerger.sh' +``` + +```powershell +# PowerShell - Windows +function up { & "C:\path\to\eMerger\src\emerger.ps1" @args } +``` + +--- + +## Uninstallation + +```sh +# Linux / macOS +./uninstall.sh +``` + +```powershell +# Windows +.\uninstall.ps1 +``` + +Removes the shell alias / `up` function, any cronjob, systemd user timer or +scheduled task. **Keeps** your config and state directories so you don't +lose history or hooks. Delete those paths manually if you want a clean +wipe. + +The repo itself is not removed - `rm -rf` or `Remove-Item` the directory +when you're done. + +--- + +## Update / self-update + +Three equivalent ways: + +```sh +up -up # flag form +``` +or +```sh +up --self-update +``` +or +```sh +./update.sh # Linux / macOS +.\update.ps1 # Windows +``` + +This does a `git pull --ff-only` inside the repo and shows the commit range. +Refuses non-fast-forward pulls so local changes never silently vanish. + +For automatic updates of eMerger itself, put it in `post.d` hook (see +[Hooks](#hooks)). + +--- + +## User manual + +### Running + +```sh +up # Linux / macOS +``` +```powershell +up # Windows +``` + +What happens: + +1. Show logo + OS info + timestamp (skippable with `-nl`/`-ni`). +2. Warn on low battery. +3. Warn on low disk space (`/` on Unix, `C:` on Windows). +4. Cache sudo credentials (Unix) or relaunch elevated (Windows) if any + detected manager needs it. +5. Snapshot installed packages (for diff). +6. Run `pre.d` hooks. +7. For each detected manager, run refresh → upgrade → clean. +8. Optionally clean user cache / `%TEMP%` and trash / recycle bin. +9. Run `post.d` hooks. +10. Compute diff. +11. Print boxed summary + reboot advisory. +12. Emit desktop notification (if session has a display / BurntToast is + installed on Windows). + +### Flags, quick reference + +Authoritative list: `up --help`. Highlights: + +| Flag | Meaning | Platforms | +|---|---|---| +| `-n`, `--dry-run` | Preview, don't run | all | +| `-v`, `--verbose` | Stream output live | all | +| `-q` / `-qq` / `-qqq` | Quieter | all | +| `-y`, `--yes` | Assume yes | all | +| `-i`, `--interactive` | Menu UI | Linux/macOS | +| `--security` | Security-only | all (where supported) | +| `--dev` | Include dev toolchains | all | +| `--firmware` | `fwupdmgr` | Linux | +| `--parallel` | Run user-space concurrently | Linux/macOS | +| `--profile NAME` | Load a profile | all | +| `--snapshot` | snapper/timeshift/btrfs | Linux | +| `--refresh-mirrors` | re-rank mirrors | Linux | +| `--resume` | Skip completed managers | Linux/macOS | +| `--reboot` | Reboot if required | all | +| `--changed` | Package diff | Linux/macOS | +| `--changelog PKG` | Upstream changelog | Linux/macOS | +| `--report FILE` | Export Markdown | Linux/macOS | +| `--doctor` | Health check | all | +| `--history` | Recent runs | all | +| `--errors` / `-err` | Log tail | all | +| `--no-emoji` | ASCII only | all | +| `--json` | Machine-readable summary | all | +| `--reboot-exit` | Exit 4 if reboot is required | all | +| `--rollback` | Revert last snapshot | Linux | +| `--download-only` / `--offline` | Prefetch, don't install | Linux/macOS (apt/dnf/pacman/zypper) | +| `--only LIST` | Keep only these managers | all | +| `--except LIST` | Skip these managers | all | +| `--metrics FILE` | Prometheus textfile export | all | +| `-up` | Self-update | all | +| `-au` | Install auto-update | all | + +### Combining flags + +Flags are independent tokens - mix and match as many as you need, in any +order. Short bundling (`-nv` for `-n -v`) is **not** supported; keep them +space-separated. + +```sh +up -n -v # dry-run + live stream (preview a full run) +up -y -q --security # unattended security-only, minimal output +up --dev --parallel -v # dev toolchains + user-space concurrency, verbose +up --snapshot --reboot -y # snapshot first, reboot at the end if needed +up --profile server --resume # resume an interrupted headless run +up -n --dev --firmware # preview a full dev + firmware run, no side effects +up -qq -y -nl -ni --security # exactly what the scheduled timer does +up --refresh-mirrors -y -v # re-rank mirrors then upgrade, watch it live +up --changed --report out.md # show diff and export it in one shot +``` + +```powershell +up -y -q --security # Windows, unattended security-only +up --dev -v # Windows, include dev toolchains, verbose +up -n --security # Windows, preview a security-only run +``` + +Flags that take a value (`--profile NAME`, `--changelog PKG`, +`--report FILE`) must keep their argument adjacent; everything else is +position-free. CLI flags always win over config file and profile defaults, +so you can override a profile on the fly: + +```sh +up --profile work --dev # work profile, but force dev toolchains this run +``` + +### Interactive mode + +```sh +up -i +``` + +Menu via `gum` (pretty), `whiptail` (classic), or plain read-loop. +Windows does not ship a TUI - use flags directly or a profile. + +### Dry-run & verbose + +```sh +up -n # see what would happen (safe, no sudo) +up -v # stream pkg-manager output live +up -n -v # both +``` + +### Quiet levels + +- default - full UI +- `-q` - hide muted/info lines +- `-qq` - only step titles + one-line summary +- `-qqq` - exit code only + +### Security-only updates + +```sh +up --security -y +``` + +- Linux: `apt` (via `unattended-upgrade`), `dnf` (`--security`), + `zypper` (`patch --category security`). +- macOS: `softwareupdate --install --recommended`. +- Windows: `PSWindowsUpdate` respects KB severity if the module supports it. + +Other managers ignore the flag. + +### Dev toolchains + +Opt-in (every platform): + +```sh +up --dev +``` + +Updates `rustup`, `cargo install-update -a`, `npm update -g`, `pnpm -g update`, +`pip` (user), `gem update`. + +### Firmware (Linux) + +```sh +up --firmware +``` + +Runs `fwupdmgr refresh && fwupdmgr update -y --no-reboot-check`. Windows +firmware is handled by vendor tools (Dell Command Update, Lenovo Vantage) +and is out of scope. macOS firmware is handled by `softwareupdate`. + +### Parallel mode + +```sh +up --parallel +``` + +User-space managers that don't touch `/` run concurrently (`flatpak`, +`snap`, `brew`, `mas`, dev tools). System managers stay serial. Windows +side is currently always serial. + +### Snapshots (Linux) + +```sh +up --snapshot +``` + +Tries in order: `snapper`, `timeshift`, `btrfs subvolume snapshot`. Windows +users: enable **System Restore** manually; eMerger doesn't trigger it. + +### Mirrors refresh (Linux) + +```sh +up --refresh-mirrors +``` + +- Arch: `reflector --latest 20 --sort rate`. +- Debian/Ubuntu: `netselect-apt`. +- Fedora: handled by `fastestmirror` plugin automatically; no-op here. + +### Reboot handling + +After a run, eMerger checks for reboot flags: + +- Linux: `/var/run/reboot-required`, `needs-restarting -r`. +- Windows: registry keys (`CBS RebootPending`, `WindowsUpdate\RebootRequired`, + `PendingFileRenameOperations`). + +To reboot on demand: + +```sh +up --reboot # reboots if required, no-op otherwise +``` + +### Resume after interruption + +If you kill a run mid-way: + +```sh +up --resume +``` + +skips every manager that successfully completed in the last interrupted run. +State lives in `~/.local/state/emerger/resume`. Linux/macOS only. + +### Package diff & changelog + +Every run records installed packages before/after. View it: + +```sh +up --changed +``` + +Legend: `+` added, `-` removed, `~` upgraded. Linux/macOS. + +Read a single package's upstream changelog: + +```sh +up --changelog firefox +``` + +Dispatches to `apt changelog`, `dnf changelog`/`updateinfo`, `pacman -Qi`, +or `brew log`. + +### Reports + +```sh +up --report report.md +``` + +Markdown export of the last run: JSON summary, managers, reboot advisory, +full package diff as a table. + +### History & errors + +```sh +up --history # last 10 runs +up --errors # tail of ERROR lines from the log +``` + +### Doctor + +```sh +up --doctor +``` + +Audits: +- shell / PowerShell version +- sudo cache / admin status +- disk space +- network reachability +- state dir writability +- per-manager native health (`dpkg --audit`, `pacman -Dk`, `brew doctor`, …) +- pending reboot flag +- (Windows) ExecutionPolicy + +Exits non-zero if issues are found. + +--- + +## Configuration + +### config file + +**Linux / macOS** - `~/.config/emerger/config.sh` (sourced before arg parsing): + +```sh +ARG_DEV=1 # always include dev toolchains +ARG_WEATHER=1 # always show weather +DISK_MIN_FREE_MB=2048 # require >= 2 GB on / +QUIET_HOURS="23:00-07:00" # skip scheduled runs inside this window +RETRY_MAX=3 # transient-error retries +``` + +**Windows** - `%APPDATA%\emerger\config.ps1` (dot-sourced before arg parsing): + +```powershell +$script:ArgsGlobal.Dev = $true +$script:ArgsGlobal.Security = $true +$script:ArgsGlobal.NoTrash = $true +``` + +### Profiles + +Profiles are config snippets scoped to a name. + +```sh +up --profile work +up --list-profiles +``` + +Shipped defaults in `share/profiles/`: + +| Profile | Meant for | +|---|---| +| `work` | laptop al lavoro - security, unattended, no cache/trash | +| `home` | PC fisso - tutto, dev toolchains, parallel | +| `server` | headless - `-qq`, security, no prompts | +| `safe` | pre-presentation - security only, no big downloads | + +Each platform looks for its own extension: + +- Unix → `share/profiles/.sh` +- Windows → `share/profiles/.ps1` + +User profiles go in `~/.config/emerger/profiles.d/` (Unix) or +`%APPDATA%\emerger\profiles.d\` (Windows) and shadow the shipped ones. + +### Hooks + +Drop executable scripts in `hooks/pre.d/` (before updates) or +`hooks/post.d/` (after). They run alphabetically. A failing hook emits a +warning but never aborts the run. + +- Unix: `*.sh`, run under bash. +- Windows: `*.ps1`, dot-sourced under PowerShell. + +Example: + +```sh +# ~/.config/emerger/hooks/pre.d/10-backup-dotfiles.sh +#!/usr/bin/env bash +rsync -a ~/.config/ ~/backups/dotfiles/ +``` + +```powershell +# %APPDATA%\emerger\hooks\post.d\10-log-to-gist.ps1 +Get-Content (Join-Path $env:LOCALAPPDATA 'emerger\state\emerger.log') -Tail 20 | + Set-Clipboard +``` + +### Ignore list (Linux) + +`~/.config/emerger/ignore.list` - one package per line, `#` comments ok. +Honored natively by **pacman** (`--ignore=`). For others it is +**advisory** - you still need to hold them via: + +- apt: `sudo apt-mark hold ` +- dnf: `sudo dnf versionlock add ` +- zypper: `sudo zypper al ` + +### Quiet hours + +Set `QUIET_HOURS="HH:MM-HH:MM"` in `config.sh`. When a scheduled run starts +inside that window **and** `-y` is set (i.e. from the timer), eMerger exits +immediately. Interactive runs always proceed. Linux/macOS. + +### Manager plugins + +Drop a bash script in `~/.config/emerger/managers.d/.sh` to add support +for a package manager without touching the repo. A minimal plugin: + +```sh +PM_PLUGIN_SLUG=mytool + +pm_mytool_detect() { command -v mytool >/dev/null 2>&1; } +pm_mytool_needs_sudo() { return 1; } # optional, default: no sudo +pm_mytool_parallel() { return 0; } # optional, default: serial +pm_mytool_dev() { return 1; } # optional, default: not gated by --dev +pm_mytool_icon() { printf '🔌'; } # optional +pm_mytool_run() { + run_cmd "mytool update" mytool update || return 1 + run_cmd "mytool upgrade" mytool upgrade -y || return 1 +} +``` + +A complete, copy-pasteable template lives in +[`share/plugins/example.sh`](share/plugins/example.sh). + +Plugins are registered at the same level as native managers: they honour +`--only`, `--except`, `--parallel`, `--dev`, the detection cache, hooks and +the summary. They are invoked from inside `pkg_run`, so `run_cmd` automatically +gives them `--dry-run`, retry, logging and live-log handling for free. + +The detection cache is keyed by manager slug and lives at +`~/.cache/emerger/detected`. TTL defaults to 1 day; override via +`EMERGER_CACHE_TTL=` in `config.sh` (0 disables caching). + +Linux/macOS only. Windows plugins are not yet supported. + +--- + +## Integration + +### JSON output + +```sh +up --json +``` + +Emits a single-line JSON object on stdout. The logo, info line and summary +box are all suppressed, so the output is safe to pipe into `jq` or consume +from a CI job: + +```json +{"ts":"2026-04-14T07:24:31Z","duration":42,"freed_kb":15360, + "errors":0,"reboot":0, + "managers":[{"name":"apt","result":"ok"},{"name":"flatpak","result":"ok"}]} +``` + +The same schema is what `history.jsonl` stores one per line. + +### Prometheus metrics + +```sh +up --metrics /var/lib/node_exporter/textfile_collector/emerger.prom +``` + +Reads the most recent entry from `history.jsonl` and renders a Prometheus +textfile-collector snapshot. Exported gauges: + +- `emerger_last_run_timestamp_seconds` +- `emerger_last_run_duration_seconds` +- `emerger_last_run_freed_bytes` +- `emerger_last_run_errors` +- `emerger_reboot_required` +- `emerger_manager_ok{manager="..."}` (one per manager from the last run) + +Does not trigger a run - invoke it from a `post.d` hook or from your timer +after `up` completes. + +### Reboot exit code + +By default eMerger always exits 0 on success even when a reboot is pending +(the summary box prints `REBOOT RECOMMENDED`). Pass `--reboot-exit` to turn +that into exit code **4** instead, so an orchestrator can react: + +```sh +up -y --reboot-exit +rc=$? +case $rc in + 0) ;; # done, no reboot needed + 3) notify-send "eMerger: some managers failed" ;; + 4) systemctl reboot ;; # clean, reboot required +esac +``` + +### Download-only / offline + +```sh +up --download-only -y # or --offline +``` + +Refreshes indexes and **downloads** the pending upgrade set but does not +install it. Supported natively on `pacman` (`-Syuw`), `apt`/`apt-get` +(`--download-only`), `dnf` (`--downloadonly`) and `zypper` +(`update --download-only`). Other managers ignore the flag. + +Typical use cases: + +- laptop on a slow/metered connection at a café: prefetch while online, + install later at the office +- servers in a maintenance window: prestage packages, then flip to + install-only when the change ticket opens +- pre-flight for `--snapshot`: confirm the whole update set is downloaded + before taking a snapshot + +### Manager filtering + +```sh +up --only apt,flatpak # only these managers (comma-separated) +up --except snap,fwupd # everything that would run, minus these +``` + +The filters are applied after detection and after `--dev`/`--firmware` +gating, so: + +- `--only X` with `X` not detected is a no-op (nothing runs). +- `--except` wins over `--only` when both mention the same name. + +Compose with profiles (`up --profile work --only apt`) to restrict a +profile on the fly. + +### Rollback + +```sh +up --rollback +``` + +Reverts to the most recent eMerger-created snapshot. Dispatches to: + +- **snapper**: native `snapper -c root rollback `. Grep-finds the last + snapshot whose description starts with `eMerger pre-update`. A reboot is + required to apply the rollback (snapper semantics, not ours). +- **timeshift**: hands off to `timeshift --restore` (interactive by design; + we don't pass `--yes` - rollback is too destructive for that). +- **raw btrfs**: refuses to swap subvolumes automatically, prints the path + of the latest snapshot under `/.snapshots/emerger/` so you can do it + manually. + +Combine with `--snapshot` for a safe update cycle: + +```sh +up --snapshot -y || up --rollback +``` + +### Short flag bundling + +Single-letter short flags can be bundled: + +```sh +up -nv # == up -n -v +up -ynv # == up -y -n -v +up -qv # == up -q -v +``` + +Only flags whose letters are all in the set `{h V n v q y i w}` bundle. +Compound short flags (`-nl`, `-ni`, `-nc`, `-nt`, `-qq`, `-qqq`, `-up`, +`-au`, `-err`, `-rc`) and long flags (`--foo`) pass through unchanged. + +--- + +## Auto-update (unattended) + +```sh +up -au # Linux / macOS +``` +```powershell +up -au # Windows +``` + +- **Linux**: systemd user timer (preferred) at + `~/.config/systemd/user/emerger.{service,timer}`; cron fallback. +- **macOS**: cron fallback (`crontab -l`), or use `launchd` manually. +- **Windows**: `Register-ScheduledTask -TaskName eMerger`. Weekly, Sunday + 10:00, ±1h randomized delay. + +The scheduled run always uses `-y -q -nl -ni`. + +Manage: + +```sh +# Linux +systemctl --user status emerger.timer +systemctl --user disable emerger.timer + +# Windows +Get-ScheduledTask eMerger +Unregister-ScheduledTask eMerger +``` + +To avoid night-time runs, pair with `QUIET_HOURS` in `config.sh`. + +--- + +## Files & paths + +### Linux / macOS + +| Path | Purpose | +|---|---| +| `~/.config/emerger/config.sh` | User defaults | +| `~/.config/emerger/profiles.d/` | User profiles | +| `~/.config/emerger/hooks/pre.d/`, `post.d/` | Hooks | +| `~/.config/emerger/ignore.list` | Ignore list (pacman native) | +| `~/.config/emerger/managers.d/*.sh` | User-defined manager plugins | +| `~/.cache/emerger/detected` | Detection cache (TTL: `EMERGER_CACHE_TTL`, default 86400s) | +| `~/.local/state/emerger/emerger.log` | Log (rotated at 2000 lines) | +| `~/.local/state/emerger/history.jsonl` | One JSON per run | +| `~/.local/state/emerger/resume` | Resume cursor | +| `/tmp/emerger.lock` | Global lock (`flock`) | + +### Windows + +| Path | Purpose | +|---|---| +| `%APPDATA%\emerger\config.ps1` | User defaults | +| `%APPDATA%\emerger\profiles.d\` | User profiles | +| `%APPDATA%\emerger\hooks\pre.d\`, `post.d\` | Hooks | +| `%LOCALAPPDATA%\emerger\cache\` | Detection cache | +| `%LOCALAPPDATA%\emerger\state\emerger.log` | Log | +| `%LOCALAPPDATA%\emerger\state\history.jsonl` | Run history | + +--- + +## Supported package managers + +**Linux - system (need sudo):** +`pacman`, `apt`/`apt-get`, `dnf`, `yum`, `zypper`, `xbps`, `apk`, `eopkg`, +`emerge`, `nixos-rebuild`, `fwupdmgr`, `snap`. + +**Linux - AUR (no sudo):** `yay`, `paru`. + +**Linux - user-space:** `flatpak`, `nix-env`. + +**macOS:** `softwareupdate` (native), `brew`, `brew --cask`, `mas`. + +**Windows:** `winget`, `scoop`, `choco`, `PSWindowsUpdate`, `wsl --update`. + +**Dev toolchains** (all platforms, opt-in with `--dev`): `rustup`, +`cargo install-update`, `npm`, `pnpm`, `pip` (user), `gem`. + +Want another one? Add a case branch to +[`src/lib/packages.sh`](src/lib/packages.sh) (Unix) or +[`src/pslib/Packages.ps1`](src/pslib/Packages.ps1) (Windows) - they're +simple table-driven dispatchers. + +--- + +## Exit codes + +| Code | Meaning | +|---|---| +| 0 | success | +| 1 | runtime failure (sudo, lock, disk, interrupted) | +| 2 | argument parsing error | +| 3 | one or more package managers returned non-zero | +| 4 | reboot required (only emitted with `--reboot-exit`) | + +Useful for CI / cron wrappers: + +```sh +up -y -q || case $? in + 3) notify-send "eMerger: some managers failed" ;; + *) logger -t eMerger "fatal $?" ;; +esac +``` + +```powershell +up -y -q +if ($LASTEXITCODE -eq 3) { Write-Warning "Some managers failed" } +``` + +--- + +## Troubleshooting + +**"Another eMerger run is in progress"** - stale `flock` on +`/tmp/emerger.lock`. Check `ps` for stragglers then remove it. + +**Emoji renders as boxes** - `--no-emoji`, or set `LANG` / Windows Terminal +font to a Unicode-capable one. + +**Spinner disappears on terminal resize** - harmless; the live-log width +recomputes every 120ms. + +**`up --self-update` aborts with "non fast-forward"** - you have local +commits on top of `main`. Rebase or reset manually; eMerger refuses to +clobber them. + +**`notify-send` (Linux) doesn't appear** - no `DISPLAY` / +`WAYLAND_DISPLAY` in the environment (typical for cron). Use systemd user +timer instead; it inherits the session. + +**(Windows) "up : The term 'up' is not recognized"** - your PowerShell +profile didn't load. Run `. $PROFILE` or open a new window. If still +missing, re-run `.\setup.ps1`. + +**(Windows) "cannot be loaded because running scripts is disabled"** - +`ExecutionPolicy` is `Restricted`. Run as user: +```powershell +Set-ExecutionPolicy -Scope CurrentUser RemoteSigned +``` + +**(Windows) Elevation fails silently** - you canceled the UAC prompt. The +script logs `relaunching elevated` then exits; the elevated window does +the actual work. + +**Pacman keeps asking about ignored packages** - `ignore.list` is passed +as `--ignore=`; pacman still prints the warning line. Upstream behavior. + +--- + +## Development + +### Repo layout + +```text +eMerger/ +├── src/ +│ ├── emerger.sh # Unix entry (Linux + macOS) +│ ├── emerger.ps1 # Windows entry +│ ├── lib/ # bash libs +│ ├── pslib/ # PowerShell libs +│ └── logo/ +├── share/profiles/ # shipped profiles (*.sh + *.ps1) +├── completions/ # bash/zsh/fish completions +├── tests/ # bats tests +├── man/up.1 # man page +├── setup.sh setup.ps1 +├── uninstall.sh uninstall.ps1 +├── update.sh update.ps1 +├── VERSION +└── .github/workflows/ci.yml +``` + +### Unix lib modules (`src/lib/`) + +| File | Role | +|---|---| +| `ui.sh` | Colors, glyphs, spinner, box, live-log monitor | +| `log.sh` | Structured logging (rotated) | +| `sys.sh` | OS/shell/battery/disk detection | +| `run.sh` | Command runner (dry-run, retry, progress) | +| `args.sh` | Argument parser | +| `packages.sh` | Per-manager dispatcher | +| `clean.sh` | Cache and trash cleaners | +| `hooks.sh` | User hook runner | +| `update.sh` | Self-update + cron/timer setup | +| `notify.sh` | Desktop notifications | +| `summary.sh` | Final banner, history persistence | +| `tui.sh` | Interactive menu | +| `lock.sh` | Global `flock` | +| `retry.sh` | Retry on transient failures | +| `reboot.sh` | Reboot-required detection | +| `diff.sh` | Package snapshots + diff | +| `disk.sh` | Disk-space precheck | +| `snapshot.sh` | snapper/timeshift/btrfs | +| `mirrors.sh` | Mirror rank/refresh | +| `resume.sh` | Resume cursor | +| `doctor.sh` | `--doctor` | +| `changelog.sh` | `--changelog PKG` | +| `report.sh` | Markdown export | +| `wizard.sh` | First-run wizard | +| `profiles.sh` | Profile loader | +| `progress.sh` | Output summary + highlight | +| `estimate.sh` | Step ETA from history | +| `ignore.sh` | Ignore list loader | + +### PowerShell lib modules (`src/pslib/`) + +| File | Role | +|---|---| +| `UI.ps1` | Colors, glyphs, box, step | +| `Log.ps1` | Structured logging | +| `Sys.ps1` | OS, admin, battery, disk, UAC elevation | +| `Args.ps1` | Arg parser (shift + regex) | +| `Packages.ps1` | Manager dispatcher + `Run-Cmd` | +| `Clean.ps1` | `%TEMP%` and Recycle Bin | +| `Hooks.ps1` | `hooks\{pre,post}.d\*.ps1` | +| `Update.ps1` | `git pull` self-update + Task Scheduler | +| `Notify.ps1` | BurntToast (optional) | +| `Summary.ps1` | Final box, history, reboot detection | +| `Doctor.ps1` | `--doctor` | +| `Profiles.ps1` | Profile loader | +| `Help.txt` | Help text | + +### Running tests + +```sh +sudo apt-get install bats shellcheck +bats tests/ +shellcheck -S error src/emerger.sh src/lib/*.sh setup.sh uninstall.sh update.sh +``` + +Both run on push via `.github/workflows/ci.yml`. + +### Adding a package manager + +**Unix** - edit [`src/lib/packages.sh`](src/lib/packages.sh): +1. Add its name to `PKG_MANAGERS`. +2. Add a branch in `_pkg_detect_raw`. +3. Add a branch in `pkg_run` with `run_cmd` calls. +4. If it doesn't need sudo, exclude it from `pkg_needs_sudo`. +5. Optional: emoji in `pkg_icon`, output parser in `progress.sh`. + +**Windows** - edit [`src/pslib/Packages.ps1`](src/pslib/Packages.ps1): +1. Add its name to `$script:PKG_MANAGERS` (or `PKG_DEV`). +2. Add a `Pkg-Detect` case. +3. Add a `Pkg-Run` case with `Run-Cmd` calls. +4. If it needs admin, add it to `Pkg-Need-Admin`. + +### Contributing + +See [CONTRIBUTING.md](./CONTRIBUTING.md). Open issues and PRs against +`dev`. Include `up --doctor` output and the relevant chunk of the log when +reporting bugs. + +--- + +## License + +See [LICENSE](./LICENSE). + +## Credits + +Weather line via [wttr.in](https://github.com/chubin/wttr.in). diff --git a/VERSION b/VERSION new file mode 100644 index 0000000..227cea2 --- /dev/null +++ b/VERSION @@ -0,0 +1 @@ +2.0.0 diff --git a/completions/_up b/completions/_up new file mode 100644 index 0000000..6cf8ad6 --- /dev/null +++ b/completions/_up @@ -0,0 +1,74 @@ +#compdef up +# zsh completion for eMerger + +_up() { + local -a opts + opts=( + '-h[show help]' + '--help[show help]' + '-V[show version]' + '--version[show version]' + '-i[interactive menu]' + '--interactive[interactive menu]' + '--doctor[environment health check]' + '-n[dry-run]' + '--dry-run[dry-run]' + '-v[verbose]' + '--verbose[verbose]' + '-q[quiet (repeat for more)]' + '-qq[quieter]' + '-qqq[quietest]' + '--quiet[quiet]' + '-y[assume yes]' + '--yes[assume yes]' + '--security[security only]' + '--firmware[include firmware]' + '--no-firmware[skip firmware]' + '--dev[include dev toolchains]' + '--parallel[parallel user-space managers]' + '--no-emoji[ASCII glyphs only]' + '--profile[load named profile]:profile:_up_profiles' + '--list-profiles[list profiles]' + '--snapshot[pre-update snapshot]' + '--refresh-mirrors[refresh mirrors]' + '--resume[skip completed managers]' + '--reboot[reboot if required]' + '-nl[no logo]' + '--no-logo[no logo]' + '-ni[no system info]' + '--no-info[no system info]' + '-nc[no cache clean]' + '--no-cache[no cache clean]' + '-nt[no trash clean]' + '--no-trash[no trash clean]' + '-w[weather]' + '--weather[weather]' + '--changed[show package diff]' + '--changelog[show changelog]:package' + '--history[run history]' + '--report[export markdown]:file:_files' + '-err[show errors]' + '--errors[show errors]' + '-up[self-update]' + '--self-update[self-update]' + '-au[install auto-update]' + '--auto-update[install auto-update]' + '-rc[rebuild cache]' + '--rebuild-cache[rebuild cache]' + ) + _arguments -s $opts +} + +_up_profiles() { + local -a p + local dir + for dir in "$HOME/.config/emerger/profiles.d" "${0:A:h}/../share/profiles"; do + [[ -d $dir ]] || continue + for f in "$dir"/*.sh; do + [[ -f $f ]] && p+=(${f:t:r}) + done + done + _values profile $p +} + +compdef _up up diff --git a/completions/up.bash b/completions/up.bash new file mode 100644 index 0000000..0fe1166 --- /dev/null +++ b/completions/up.bash @@ -0,0 +1,30 @@ +# bash completion for eMerger +_up_completion() { + local cur prev opts profiles + cur="${COMP_WORDS[COMP_CWORD]}" + prev="${COMP_WORDS[COMP_CWORD-1]}" + + case "$prev" in + --profile) + profiles=$(for d in "$HOME/.config/emerger/profiles.d" "$(dirname "$(command -v up 2>/dev/null || echo)")/../share/profiles"; do + [ -d "$d" ] && for f in "$d"/*.sh; do [ -f "$f" ] && basename "$f" .sh; done + done | sort -u) + COMPREPLY=( $(compgen -W "$profiles" -- "$cur") ) + return 0 + ;; + --report) + COMPREPLY=( $(compgen -f -- "$cur") ) + return 0 + ;; + esac + + opts="-h --help -V --version -i --interactive --doctor + -n --dry-run -v --verbose -q -qq -qqq --quiet -y --yes + --security --firmware --no-firmware --dev --parallel --no-emoji + --profile --list-profiles --snapshot --refresh-mirrors --resume --reboot + -nl --no-logo -ni --no-info -nc --no-cache -nt --no-trash -w --weather + --changed --changelog --history --report -err --errors + -up --self-update -au --auto-update -rc --rebuild-cache" + COMPREPLY=( $(compgen -W "$opts" -- "$cur") ) +} +complete -F _up_completion up diff --git a/completions/up.fish b/completions/up.fish new file mode 100644 index 0000000..3c8261e --- /dev/null +++ b/completions/up.fish @@ -0,0 +1,38 @@ +# fish completion for eMerger +function __up_profiles + for d in ~/.config/emerger/profiles.d (status dirname)/../share/profiles + test -d $d; and for f in $d/*.sh + basename $f .sh + end + end | sort -u +end + +complete -c up -s h -l help -d 'show help' +complete -c up -s V -l version -d 'show version' +complete -c up -s i -l interactive -d 'interactive menu' +complete -c up -l doctor -d 'environment health check' +complete -c up -s n -l dry-run -d 'dry-run' +complete -c up -s v -l verbose -d 'verbose output' +complete -c up -s q -l quiet -d 'quieter output' +complete -c up -s y -l yes -d 'assume yes' +complete -c up -l security -d 'security updates only' +complete -c up -l firmware -d 'include firmware' +complete -c up -l no-firmware -d 'skip firmware' +complete -c up -l dev -d 'include dev toolchains' +complete -c up -l parallel -d 'parallel user-space' +complete -c up -l no-emoji -d 'ASCII glyphs only' +complete -c up -l profile -d 'load profile' -xa '(__up_profiles)' +complete -c up -l list-profiles -d 'list profiles' +complete -c up -l snapshot -d 'pre-update snapshot' +complete -c up -l refresh-mirrors -d 'refresh mirrors' +complete -c up -l resume -d 'resume interrupted run' +complete -c up -l reboot -d 'reboot if required' +complete -c up -s w -l weather -d 'weather line' +complete -c up -l changed -d 'show package diff' +complete -c up -l changelog -d 'show changelog' -x +complete -c up -l history -d 'run history' +complete -c up -l report -d 'export markdown' -r +complete -c up -l errors -d 'show errors' +complete -c up -l self-update -d 'update eMerger' +complete -c up -l auto-update -d 'install auto-update' +complete -c up -l rebuild-cache -d 'clear detection cache' diff --git a/doc/documentation.pdf b/doc/documentation.pdf index 3e458245a4867f4f65c4872589f1077c566929e8..5ee542f167df57fa980ef765722cc115343def83 100644 GIT binary patch literal 217082 zcma&MQ;=xUvMpG)ZM$lhZQHhO+qP}nwr$(qWgETE?HAD>=S9a|U-M_p$jF&Fa*WI* zl@}KM!$8XdMLNGcvJS;UKu=(2XbHv54MityVr%AXPQbv26jx|GwlFhcLA+BwK((?PL^iyU9yjRMM55XIXMk>}~>>BV7|8x@@UBuJc! zeG9a3p?c;$!3oC^Bu&ad*}ONstKHS<<4T-8FEqQE2M#oMpA71h2bOh!7%gee?|SBp zY9t9wXX%1XL=rO&rzTEZR?YaJBK*(tH<)YJ!s6A<{7NXr$EPnntS8Qn9CvImeqsxwm#8F8xx1KKg9J_&2DmjruCtosD3 zug?pK^u;6xhN!uxv+i{nIM4ieW)92uz*D&gQoz!yYMN=M^`Y{zXd5|_^Gs;im_xq5 zkjYyy%rF)OVp$@kZ0EMh5TH#Kmm@-Z-6qe7953W|qIM3M6tYJucNn{x;|MZPGK8!( z=R!Dz86=jAz!0leN#R{sKyiK15|r_|=0|Vc=KU1(rj7Ic{i2l2MnYJhn$2Gt-!th@ zt)qDxDW-J8yYA^4z@>GsOk5X-qSsMON<$CVLx*rFRIj)oRAvute~TPF89Pn#>N_IG zyWD~hp*8sC;}K+om0edh?Bs$nQ1)$UE%M{mO?+;i5qXR1CCX5%u!YurqP`u^#D?_r4{g)}+!CtskFGn1L zvLXD*2V1c*Q^H6@9$T}Bnt(U3obH4Y@K}b_AU=aB#>`JtfOe*#llXk!`P)(CGqt#6RKM3MErI zC6A0q+J8zo&8MlXzEXHQRSRxd(mW;^%b8^#cVT#!aSZDO(TB#c_^hAwNY-%f*@WD* zLn=UQUseZzMJWvVMAOE8cS#cig&znbCQLpo_ZFSk3hhvHpLWSK>PRL!@=<> zASu1-a)NMt87`Ou*g<7->Jj<^0s!h)FblMm!X+A5nFc4=gXxf>Aj0sF2eDMqgKNIj z!R-W!If25V?$00daiSpe@*oPD(wyKO`wgnnoT%%Ai)&8)euva?sO;5um_bW;%wE_Lht*O^&);(TY1WFg3 z`U(pujw8}_D!c7Fteml#2uy|^S6PX z=PFD=IxB&lF4xxuWmwln1^xpu*w;C*BZUcpPD(O;Zg3dimA7PYox44QsPp;+hhe(2 zYHv)rs2a1}!$MBX6DnFoQ=b(j_C#~GS@hk(v-*}!Q?vvfP0Tt;y&(2U9ct;u8ocWIoZwt8xtPp_q|X!Y%X6m1m0kFix5%&5 zA-8+pKEHNiZkQ{-W+?uQpmtllz*i}WOl$>*XCIR&wI=8 zI-NLa(j7nv!>MRGYI1+%UQD^A(*1??5*C|qa)Hf#01DT~;JPu+1%NG9{%-aOxHd0J zV_3ibq!5sa-QC?bG_rkX_NNU0U9s0zp)fv5$=j854wL%pI{DDkb)!8-ny+Y_A%+Nl zFYi5ts@cC}BF55^K@W;kzZ7C%7Jpa37rVOC!M=v|D}8Gp@eoif#fs+p zTDL!KTlT~p7!EB^$n+UMQ)?gn(Xs;OVsk7vjpmiy`+0~EzeK^T#^AdPlz_ZP{X$^E4VJwJVH zH|D0}Nl*|W0(ARqcVxqF?#IW2^*b~K4=x@82n+vE0oO=IE5 zm3KfOxS~&bkq!L}8F6g-moiATFFnVokGm|uPbu%$@%?*aYUELn$GJ4vh$&zP|@6;C$dCiNq?NDhc;;<_$}F4T-XZ5Km548WjXv;`_cW{s=&`}e>QmHMkoFg36B`edn^a3HA45XrifYY>Nah%7eIeJPx4G?e%`oJx-nJQ4DREUA!C^ESq!jhz@s4CwXgD1>ia~ zm)!b&j9jwO<@WUo8S)H9^s^-$`i0(c3q~D%cLegXcR@@rg`aGNKP!RDZXBzNgNG^Lb{jF$VUBf}#vE8EaKT&=}d~W?HbmQKO=&w9a7JXsOQIfV1hOA4=M6E@v-K zWvgV8md0oi?2<(lEQ8uoDm$=bqDs?obxEkc5ZS!{UIuI;4<_9uwzVCzt5h#Vt$0WmHs!QBO74AT`79K`QEAOEqBmcw)HJE zOv(eIZl93VBEu$@KKDVHe%nWeLKG4pz!MG-2@k$U!y+6AzdJ`@5JVC*h{CUn@~NrM zo8j_=?$1j{ufzziaAHE>b#-WXX(X09?Y1P|*vV{8)KtN{8uzN_o`+iX`c$>g_0;65 zE;96{ZH#Rt{ul@3UL%Z!RE31tWfUrG@7I#YzLCUsoQLpJC6P_2V zQ-7?+thSS%wiQK?nO|wN&_%1)9g6-ES*pIMD^tSgGw0)P=*j+x=RZ*BDc8(kYg2j; zs#U(eaD`!dRTWAr1#*cQOD|G6_{s0_xphAvigt?S(rT%V!pDLG#52lKt=8I7f)vnG{`tLUr$ye>oBs^i zG=oo-Q~G?Wp>NzY`{(vrq1ba`@VhT*d^gNE`Qv^lFgvHUF&!Kt+Esiva%6R4HMwr= z3BmHw!oFc!W3go(H)2#!#1Zf-QQqLe*`0CVVfC&@BNs%Neg7f1A2|W1XiROn7{UH8&_P{E}IaubIeL9qA0+p^em%h_`vgE3}2eM$I$UpAz zua|%^z=*1BfrJD4HpA2Y0jY39ELkgC`uwtG>HbRwoA~L+8G>x(M8!Jamr}qzN`0kO z#TwFCi`RM5pBVjgZ5HL!q^KwkR3F=!iWWq!nvvheCjJyBlE8wDF<4CXrQ@rUo%qWv zAC~c?Jkb#4#9;6S0iZw?hpIA1844e_a8m7H<>t(UCeMPXoWML*!KkMCFhHaAT1p_W z4JZZ(Z+z^Q-bg)~8gR{o@xay4ltU$;ZO*+Mp z@+Bs{LlK0Ulz7oQK#g5PTz^mpA&NB@${dqe=;Z{7j&g(T{mAMPS?z9+A%X<}5pEI~ z7q<;AV{wv)CdbVE?wY(dMB=r;w;MeaRFO_JcCPlv^w;g5daf`+P~gz6W7LyR#yry^ zSH#lI&5cj^UmcWU1HdoTRZdh=r?6&P8?)(Kieh$fO2hWD+k}o7S?ZtgtM`m`{9~h}adows~y#8~VE1T0Xy$orb}M zSV-zt??k4*IH?u?khU3YCOG`*b255tHa9LwEwuVvE&*xpshlk7@Jirc9FH8Xki84I zAuw_}*mqRu7txyd} z5p=X$R9X-FtC8O%a9)vTY5~axeOIRahpnW4Px`FWxt-s`N+2M00u6;ofv#i~!XslE zhx0Dzo<*#D2_l<(s#yF~cG~47WLsC;Ohscm1nCO+6ND(hULx08=;b>Zwdtl0i(BVJ z8s(M#i&}XWSK+lf8?xjsmKd%)8(+}C?8Mt2qt?;4nN~LXNJ+yn8sBr(5%-d5?g*22 zLM%7;XY4t`%(=E9wxQ^KbQgzjX$-e;m(=LT4{(PVP`QK#$H?|S>3P-sADoc;4^9Zh z{KE;%qi|kFfH|Fc9He1!d2Z2jJT#O^3WmY2`Tsu%>JKDFA~55_aD)&Z!*tKgkdC#)A`v(D!EdwY&G$6ANKCh3zvv{#U@8 z?IP-SW>0=_fgf_A0`%={%gwI${pNY?bTUAs$h+%5RzFz$2UK{U|AESb#XnG? zHTgfFq8H&Htg!!6aB+;lKV6WI{8d+%l6gfpT8v5yO09zy6`JS+38!Pj6XYeVF#u({+<^=_4gSqyZaw82Q-*jbTS8dcW_ zPOoFuku4RJq5tES%Ac#ll6sD%px>{b!MhK+dHq+^BXu_u%nL=)4&{ESwbIyNqP2x5 zpvEgXRRvJNw<+N7PLNpyil&G%pqu^}o-WO0noA-k9q0ri^a%v=NTT zBS0&)_yY7%D89g-ytDT2Sdh|J!3l#cC?0rjUb1NcCY{fS&YYQ zKV^%Q=5nGlIGSd7#a3v2LtQL}H2Pv7Ra0r|dkW?{8k5L4QVTgUoPJ`kaQs#{+W}P> z2Z&`IJdLd%P!x}m(tisPX6FAEB8+TItp8gfvZAdKx808Do2N%;?Jo@6&Ot1MONWIzgD>)GGv3&D6T5os#gJU*A`U&$wsbgU{GciW!UC zoZ9l^H3>C!ZmHw?h}B+0eUKpeaN_Qy01UE~$UcUm$o-D0@f|@4Ya004?&Eo+op3d6 zYGLK;1vBMJ!>pkK8R&0%B>G3fBkKJ%_e3ShR=LzRf(&wP-cd@YicLr-L1SgRN?D@d zy!`p2qk*`tT`S#6wg8>(zQ&PJL&Hti^XXUhxsPUiNlz{St!RMMf$Y$S9p|&bc%(hzz#|M?@S8jpg{_hs zmg$S$DB~RALqghC&|e%fp`w;3QnDewR1ZxxLrBdih~~4E7vtcHha^OiFRI8G3R%(I z#&B6NwyqK9Ahd-UA~bF|)hN`@brHPLJ>iDE2+p>3a410D;#I%w{-cr~Yr;;>{ftQa zn+;_;c{(;r7y5_wwg!VM;T$U=I4i1n;OKKm6uh>=cf)4WCv6??6WAj3;BhxuhoSYP zD|PHq4jS|g`dHP2X4YtObE46$Sc`we>Z(l(9GkA`i%>+kO>4~sO+_L%LuNgiXV2Xa za`pJ_`sL=JhQM?jx&iZZ%%chZ;}MW+Ftp!IO4+I|mEhq4xb%kdx-d1-EF)%FagnAy zO;fTsq*W=(;(XXu`4fpw;IxZDm1O7lwtGF9D*4OKKzjrlqwrX(JdsPn3~eG2fEavv zT#n$*Jc3&GJLfxeUr)aZxY3!vLMwEZN@32EIWRbp5n=H;VE zhaHwDiE}~3Mx1!1215y+VqL_1)XzR0c+fkPSe4(Hb^|pjn?I>pW>Gw}I5xxem}^^b zIDPHxg?8dFbWFw~opC>mkojb-P`QuA@nZ8twYUOI)5Pv$Sb|A=YjBD)aH7wR*TVz^_4v6af?aV)!(pqkO%8-kkc7Q$@YONUghD@QgZ* zOc|DTMAgss@p4zn&d+=Xw^hVn|w{PMq7tE zSa-KCbI&nmnd98F4D1$5ns)`jEyc#u4itzwh4&PNo5RD6T9a`A>2Lcjkd<^g)tzGwMU? zHhqkOajpR{Y3j9xO}aU=cJW7({NE+Zp6qOkW?on3t@N3D=z^!{H~Hzex!aOzw5xM^ z;hW1doG~J>j>Tby`9AQGK}gX?*~X%gMogNt2-6`I_6B!XPqM|)G~&&FLaa|&d5Ez% z9#g?arP6S3`CX3zpo4I^;Q(?pPqyADBo7k@J%V?Ll)Yx($@A3UupjZ-h<9p?pXO9v z*t_rAmjw|p1KlN_+6VzB9hr4(o>20z0=x6rfQOcV4)lWa>dQj;kvr|p!Y>dA5_xF7R%UM<;Sg*Jaa6D!a#g&N%^^P-qKw@E4|}u`qD`>^fVG-%(2bl1f}iDzD^SSF}Ya6WGioVvmTPy zsdc{Z5);(0QFfBB?0=__zAm|MRJr-O6hj#JvO>7_X$)E_x(CKG~Z z?SY`Nm2yyQa2E9(d}9|orC~%(wcjSEV>ps7r7<76LVC+xKcT-1!6cpB zJsIO$k7S}5*>7@E3Uq~ZWu((4Z=NPmuEQ#9+GQSPYWe)WuWKACT4MDn-O*b|AheS8 zEj8|Uehf|;yCzMReb+R??zgK|%7$ZBM&h~yy+Nn##HK%sd_G6}#>J3Rq7|%nHZd22s6COCDS}p6vM_7(4)pxA$LaKP2dkX;G zWlbMUr)3@iTX05JLe!Os6iN0EW6iYtG?!=BC?XJ#-!-lARCwCik%?A+vXzadLZopP z?b}IyiVu2c-g>uBSIV)(lNv3XqFHyq=2<~Qf55u0_I1BK{l7fBnykN9SeF58HY1V4 z$({@zA<0ZsDx4Q(F|18>7EPN4^W7&IDFXEO;4b688h(zonAUMQec36OtT^s}u0Yd5 z3xP^BOx~sH8fR-1v17amami={f%;^^&1S4*pWs{IsT_Dw$m+n#hgGBV;zOfW#WiRzm68 z;p9n-z5 zf~Ju-9`{(zvi7K{=N@{b%TC^l8aFI>WbIFSwkh3KZs&s6ej7f`VME<3Snz+}f`9kn zx_jp&Pa4?XDr<5cpRcglD(kAe>)tBrvwD!89f;0&2@zXB!Wqy(QDUz~A$>dC+~FJc z%l`iIfhNuTH~(d0`oHjBRyM}}E&tv5Pb0n^^*@bxX?!Y~Gzflx?yIfVq~eVjtu=>_ z#2s+WK$2AyiASQXrN4f+10g6C^Q@FyiHYR8!Z_aj@Ak9c2q>+oXsx?>2RTQ2b+fzO zM%zR%3a6Z_D}#1?`Mk9@dNsxZlH>*|wTl%;G7sf2Q|3mt zcGneC<@ByQtvZ4{!wjJAlcp&$HaB+>Hg&?;&wvLY4yUVgMHMp`RR#4EoPQ*Bc8Jj1 zQp6|U1oYHG(l49#7)}nB$&ySA?&NUs=P#lPHS12|K1`RBJ99Vfg@!A-{lb*{dV4s# zc!>Q$5j1W6y>HZWj|c|KS+w$e-hs88-mcZ4iT9psxSo$U4YP@FIPCGX@@9Wpo=;j+ zS{QH$faEG$d!vR(35EcPlbjIA6o}}6r_Yax;HE@4OWYIdqQ(jgz(Ke7LjH|)nVW0J zq8Zrw!!gL#CGyH31oUfPmgRhQ-4ZTYdz-I4e)P{&`WVhtMX_?Vj}4I{xUMt1Al}q4 z`-D7}m}0?kQAZv0MpzBz?I-tx1;IhU22K}T>&>dxj;%x{ zjj1}wHz@aM)|x|COEu5BZYV14T%jg27(oDqOT&t)($R%D8Sy{(tr#j2Yv~Lis>E5Wu6$6 z3dnTKN-W_L2ra~&E*8*x;H-*@Q9Rg{0KeWsU|1s zBM;b!G^BXA-?N2ZiL*`64OIm!|GH&TD#nq2mtW0;bID}x=T)5Zz)M{-L=jx2?~fDc zA=U3sz8IM5)C|Zfm^6m7EqK%f)8t29rw;If2-QyU%fhA+-O4zz!a_KDo3&XuHDJzH z!cWlDo`woGhI3LXt&}t8)(lc8EZ>JJnnmd&o?LdxoAS+-%o;nWnLIu--in-nQ``k% zp&q+oWL5Po=TwCf-IL=N6?+c%jq-=}xT2l(Vf|W=YOY%KAHvtM*(O+9R^7-4Uf^T z1o&q6MUqTMs%XNM>+x3l5I@Z3(-g6=(`qJn=1uQhGU|>0ko1b>IvVoP4uN^$o_J)U z3uRMYaZB66R23CY7hP6HD<0{Zh;zsW7{)fiQ=oc+565ItEb*Hngc&JVZj7}CX+DJB zEp$(exNweZqzO__D~I78WtuBkS&VykfQYa^2RXbCgaRbcxIlQ-;;U-zU2Hbly8_qL z@qlcXK=JR#-hjgr%BFdO=zP8S0%XoJMd zGXyJ&cHhR$!BwTFS^6?S@H3;|vSfBI5X1r5OhAnkD*`{V3E|+M_pi_mfm||PC26Rt zfX_i15lzTA03*>_MdWWDLO2>&A9&3pk^y_#^I+E+P{t|8m>s%oXTe^{_KX*Z2QT6& z2af-9Q{;$HMSLXGitXQeFu`^pG4t1L2pMwRJ=y|CPpBGGm?>R*g~`93-k?z;QXUw( z`#!=jcbAl**s2EeQ{NhtIDn(^3@NG;1~hlox5wGKbdRgW#-G-ouw(yDUghGqBTH^qkLX;G6>?05I5ULeGltJS3tHFjxUcv!YPaV|x6dBtt`};G=Lq$Xwns_p)xLqnnNC-61|D_RRl|=Pl zxlGFM75TbrvIT5jde*UeO{c3F^X>HhO+nWN@0>0}Xlj27?4E0fc8J%4QOMKis7JfD z-K$!)vCvbj^^zCyx)JK2HRzPz3QllnCWB$^XVLM*x+Dz0l*5=GxmN?@4yA_+#nA7! zym?LEhZBG+Px}_&pBAJa9&;P+rCpypsL>tbCo@Hae<)N_iWaP`4znDp2L`UfTmkUv z#)p+(N}xNvd&AN@2NK$jg|!Jny8{sk3#!wMC(YfF6kRJ;O zVG~k$8#eU{gq|xs3kKpy|AYXobd15`y3DUsV`9R;&0^LN(%aqJAb@QHw zqMn#UGhAG4{Pb)g^2BAlV7phOMGv5BeKl|I=$ga@E_$}QEZ;wW{C)l(f7qqWa|i&K z#s$~9@?~i6S_6GFpo0@NC0&lwPq#K12~sSX9&NtnO>b$f$5LTJC*%c-Q#aa^$%?4R zLvX#3s6n@m!yJDm(s|_5y|B85s2x^pS2;OGxH1g>fqDSwt59N57Kin zJg>xcn$GXydM}UsQqWD}6ExVh-Qqp#%q}1%R~1>QCgAws(rDsf3lI&jT?U9DtHO!g zNL*Bctq&Nl{Cia~6&G!L!@`T>^M&)Qp?jlWs=ky$M}Okw9We!$-hjZ2Q_&l$nh}-n zf*C7YUJ^iriEmm~eA|MXu6G2Q`ZCOi?VBM$wA?-4cE0G)3!~4&37;-5E$bCo&m{*> zc)NYVN$;MjAEjg(BZIL*nrCvmpJMfv-ue5i>#hqyKZ0{gmm++$6D90-+_3<;w#k=^ z+Cu<&L~_1!1o$jo*Hy#TQ8(>*Ejw~6uaiEo4?8buqOOa-CY52~x6yAnlo5C=LZaz^ zf31B9GOyb%JH1{BvnM<_?!XpnCtRx^A&j$sfg3Z}v;LdEva|kQ_$vn+`~Q}| zmS{>P9kn9)MJ`V055X9{X8XmVpw#SKrj;Qg+&c^h(!U=UuK(h6b`KHx}Y1{V(1#?O6P_Jp|*#ld|n;nESC zNx%Jl3GVCJ#qwyYG&CBe z=Vs5duMtz@yhFZbJ^d9x^7bbhggjDi&DzHSIx$TmqrzUrj;jd%yS$T+Vf~andee5t zC06T`ej<`)!jW#+yi*Dh_xU4fmxB_Cwl&}^c6WJYVqR(GY4sd-2Jo-#oy8ju>Y%f+ zX12-LhV!@MvTT1!0d%2Q_ckh#I@qSl0cGpS|ww z7kuc1>#Nhv&_O(Rj(F^^`eGP#u6Sz56mJ34C{B-}%@Gi0?zr|Hz$))yQn0^00&v^ggHeZO)gi|qxp+H6{s}&gSnCr7wkaNj@xzpmR$FiH=d5)wFW zr=EPmZgypEa*gzFS_hX2P_<6Ed?xQEwrx^alx#}w4#iv&GxZP)FhDuW%&7I@JrSBb zuzqw!M6!oFmHr+xyqb09^`I!xOj4p;Y`ChOqXIs5~LKWRLH0zXuOls;W8bDc~>hziEaJxmZjvkGX+z^`)dqk;v=c>G0rRbUWE zcTHzMWT**P4H5Nue4LbX-*m-?-Mmz&5&B707lbWtXYHm-{h`z9(bnfIwSe6W6)UUv zSjUuw(Y^#Aj>nzd`g5^hgAfbC?(51thpY0>pK5}z&W^`y>8{wGM>+e3dYydawGnf5 z(4IP+>tPevd8zuvn=BxFx%I@`ItM=SfJlI-L0ptLvVV85o07UUAJUN(D8P#>mRB!( zzzW@&(jwVRBYsokF->|CH6S;JvsRctA}An91jNn)tka1brnp4^Zew}cap|}HEF^iy ziU{yQn??dRARM&r%xlpPboX{kBWHv_=j=c=Zha%w3aFsh>R#HeDf$yZf-fS03sj|1 zg-eqthBBJ9^k;-S4n&^1=YNMfF$2K^uc}JBt9NVp@8MV?0C-oRTscPZh5!g6&hq81 z1YDC@&X_8dr%Szr_Gsh+d8Q@pR2?mfk_JU795fcVp@>$Ni-Ff)LS@$Vc+;>*-t=< zjBBv8L5PVUi6hd{X}8#e5WT>{;8ET=z>H`dm5l=y<}ck-O7YcW88UO%Z#!B<3lVVr z5;PwWwlm8mwFm$S;3|7zXMm@bMw1wbv|o6^w02wf;9bbDG4q_G=>5t32~`4uamPe< zUlN4#v(&<_dj+$%6YxVn1b_>ms%54t%Jbd}4j*mi5PCuN$S5v?HdqzL)+ZX;j$_>? zbqdDSXV?s~T3eSM#FtB6LldL}rGR}&pHBs)QC(-65Q5y(uM9*gBIMy#qQp@e0IbHL zZP`uVylTdM9#syjlN)8qj`h`|`rO)!XhD3@^9i5_w|@T zeMKSI%PQr0r+U$I?ohAM+$Z)8ZMYnMZ?mdEi0CJizU^WOqLUeGjS0$QA(>2N^|GqS z)QRfL(=&osOs=5(fg6TlZDZp*DtZB`EmGIi9@T|27*R-M-9v3^t`+<=Ir%`m6U#K(U0E|?eo`NTbAT%sq$Xf6WGIJJUZJmnDMi}%E12e_ zIFg!#{l|8C5sv_h`?&&9!F!gG3?QJFkQJ6uh#Ysek$JlEXXm=n{28P~o*bH)r`fw# zK|xt(p2klPaM|@wIF0T`8H_QO%32?=S4g%Kl+potjT)l1S$(s{DAUSh;leIhuosB< z>zvHhZeUQpQv4iV#u}bk4w=ijYF$2P^#RZO%iQDjY;*#Qov4H_bH6R)vs0n934xx*#Kk5&n3fR%oy~Z*xEfgP{S(q@%0H&1FERR zMFtk%eIw)JyVr$ZF94eJH)(Nka)QmcwXdZ8%dVMGi=0v*{GrvUQSOYpY~-Yi@N;Et zcyPD@I~MR5fvselGk=W}kJ4(1v=PV5@H6*jk8s19?wo+(B`7#a=e!q3`@*m6_2O$i zrG#=cgxcqu-Upl!j_*5}av}Qn-H+`|>kzj#uY4ejPT3eV}~{2zgKJlea*+`{@}*Js$ACs6P^$S&d~^ELn3?! zI*z&qZLPXZena!DzW}toiB2kL2c_dz!YMKs>xcD){~@;d;maSH3WulY)|w{ONQEFf zprhb(?czdq>wG_k>P%qm7c%p9>#DQ9?2Bqgx20y=PkW22KMGR>dX!S=HO@XmvpAi6 zi?H0`8q#nnL1lyZ#!!302hMUxD)v8;QlpL6>L)Vf`K3QQPnFsBHFODijA05%2-u_ zj{kEsPH{XCvKbm(Y;omb$LRzNZsdP6f?=e!Q-nBvREtX;CPFG{pE}R7KR-(DNL9(b zBv!}e7lqsBnA4}w^Lrmq+Ci852#E3dhulD27kUVO^fwBa1@PNUr3{1030V{vURDf$ zWH3ppUQEfS7ak#fG$6u&AO*l+U&OU{b+isi669eo$N3cwD#Wc<@n#xdXyuPvH%BKDeH$wB>U#%~Tv;Cv~TLih{ zfiUctjH=>cKe~?icH?P9GAgwJB)?to@mPH6BKTAC{J@(bUp~mX3G}N*5G$ZTAW5j3 zA!=)@@9X=jUm%2h_}%|z{0#K;|4sRsn3(DRx0L^XTGs!wJ3jBch3Ux}904uB$mLJ~0m2wtc9|T0+UsN>#p~&kU)Q$L>Aap-|1Oi%A^?r^{jlR@Q@z|x5)xL~m zkug@tU&cy2-I)oQqoe%j;VubOMcc+s+M6oS+%n!GKqWqs5)b>t!j|CZNmup z>w;d6TDrg*nl2TO?tE_)wRa?2YJI_U+%Ygdiqdg&P8F!xNZ%|@*_af)y^QsSrlW zf$WqhFY=4VPaZu3`taz8RfLi{TI0-gwsH=@8Po|dVvj1m+=d$~;J6pM8cSa#N@nYCdUl98_-7KmY!uZvuIZf!kskb`rF_&# z0VPRtGWu3?PTI9JuS1<;0ntFo2x(LTbo+vh^0L%AGlPr_tVyshG!t|q_-c35-5mr_ zH6}FiVxsI>+)w;yF9xGH;{A?2`G_{TkE;aEJkkmSKYz9Zbp#(*(qvOPqT zW;7UG^5hyRlwgQW2$ps8}Owlseru^**!$tQB4_dTQ@oa6u97NE;2mQpWfIi=Z;R1BDEVyhS+f2@OnOI07iFdiI@hnaqT%-EWcrWAI)RoSP3PzU**>bhK{jEh1l^* z)-9bUGmI(96G(n+$9UCq$eT}rH+#)&%I4AL^uUo#xnmvi^E2y8$7U?6inA%}f*em} zwz`CRx|}{sD>PYus{ZcjRO^cSfcmq!Lm2U#-I@*My@}oAofDC22PsS2zCHk0Crqal z>HhxDS;T}Qt!3KL*#=Er(EhIk*BiUUfpQ`;t7k6tQp zSyOnEGSnZ}{*vg%nGXZzIHerrpLVL~l7~Llj(p%t?F!HS`+&_hnI`>Tlyz1dIxx9B z50>5jM<~8A$YBeA^E=Fl2MZrPHfV{t5LLjm60}jS9MT|I)E>z)-;#ebJ{~FP`tj=y zDpjsEc^25IH&KPtRq5aesAp~q!r`~h`FDKWwGAvM!`k46l?-zSo*J8)%pTr>&~kqd z+pKX_zi?0hMn4;v7=}f#6!-C=W*hnIv^AelT_E_#APWH!_i!^XI34S>T^xLF^l4SAFXscQ7L=O$y3q2 z4t?_Bb}A#C8e1NzLx%pyzX)S%10-Sllr6v157klyjG=(o0yf@;MY3a=f5odsXQW5v zRcb*f7BSn%7}GBC+*~#a8KDte>Tw06*+U8Hq$UF9rrmM%1wbSRnpF7j)>N`?xmNj_ zP{874s<@SNZlTxNq0$M%IEPv?^IZXr85sf^Nm_wIT5FXDjKB@^1uhmfFZamP^Z7N5 zu>RrW5lznUk}0Y{U!mbDWg@NcU+0kuW-D&g;bBunUMrhMq}d4;{Ab3R)0heE^J*Xf zYKJdvcz786*LU;p3^}n^pH6QdM+cXOEs3CN0EfdszguE3?zl5@#=H)kWXN;)@Pu^= z^rDFgxf$cD)r-b|8-QY;1(mMHLOp0zzF8}JzAmDO-k)fbN(hfyDvq>V`51Ddw*j{^ zvz_~xL9W|^0&8xp6#iVd{vv)5pb+-qj(uwu?Fd}RH`ha8=7RQqcSmD}YZ~h|vudNT zhAe}k`TPA$hb+?+>{Kmi=JKxkvzE$#IJ*2uV9QJ?UcnyVWNtX1!FsMW$`d@dJLR@{)waou}?A{`^x9&U*l`ibLxIR|`j4-dIk{nSlWsMFRsx3@~9sV>dD{ znM6PdcrZ>zk-oj`eIKWX4|SHYks7XE)_Are>a)VW&a8*#RFehjfbUw64q@hCsoA*G za98ukOBjJKG%(XhFz`e%y1WFUFXl~a82YggtPT@XY`1-%PcJj@dAd5f+TNa@&(MeT zzjYQUj`v!qXJT=1gAeOCBt$f^vmhL-z;%7Rtl&x7IJhxZeCRj8Trqwj?% zy#u!a0H@`KxKFS0xcMqvj(Q%+wA_e*D44??bLD>fMLF(WSK5Q)dFYKr7dtcHMpj5U zpJ@?$X0LJvusRgei^?7OH*67DG&hnsSI-5z_c=ZwtPQNTccsuXN+Zh~-cZj9G4Q|! z4i>lhgpWwz*}QUM7w2D=^)g|lqpPL;ef)d<-lsR;ce*K-5oUpy^{D8TuoTAjLR`>_ zjqk@%zKq=#H!;j!#d>;N@sf#{M=1G=;x(hHzT;4rQM_+kHs7>%MTp}0nt44is<_7E zNR!>7H2G&`ZMS}cXP6`{8-R8OPrj!km2=hR6%YVF@-WPL*V@(H*X8GCXX>%)v5wbp za{5OmgIS9m9rR{9ll>R}lOZB1;pl-cB$`HJM@96Q)}}Qrn%iHn zFZya$l$baUH;VXnjD(qgeL(2xE$!c9AMF)Pl-<8=HPO?@`Tc*9tQ(hyIPBvTe>i2B zJr?!w?!o&~xB;ZW^9>OpBTTZ_qlNt3!>QEB$o+-+c=> z*BTh<%xPV zn;HB&{{AJ(OG?!Z*0rHq zC-N5giq~JzufB^5TS}bQk>*AVVN)GL6AzjdJg?zQNJ+qlz5Vet-p!*_4g{UYjcA!! zM{g&)08Xh+xfK$A8c@4HZ_%Ds?sD?j{aU<9CjW#e2K`jn!{UNm17pQyQX^MosU{6i zfv5|o*`x7VBv;1J<2p3C8-I3B_vtB`14KKT6}32He(gh`Fx|owxaw4Hho&Sw*6!j* z&4T0seA^%tQz$#@5-3t5J&I|_*`Dp5b8uez^7IPpzK z_F*TgI~{?kEnJkt!YaMz4F>W?9r-Qez}APt*d+tRz8aX!sbdKPsB%_CH{;WhU2l{S z6@8DG&*PqNEHg?jufiUs7zVbNlp7}-`sBFEtb(9>V!zl?ALucu^+PQ@F<{8AAiMiX zP^3Uz;N}Go(m`f-56Wa@7pf>_H8*Kz9Lmtgg{&`YD4mwo`)KUfr`S(nMMj9K652I1 zzM7qi3B>@zDZ_D$)sIIt#oE&^pnb7))qe+9O#c_OQt@;!C7_o#vQl=jg`$@u_y@fH zw*!WgvkL(`2j~CqkHN(JKZah@>4Nbn>b+icn@Lhtl~NayON$Z<!O-=vY zQgb`p!I0VB!2sFay-CSM-Scd|jR}R$W@!pFRuS}-AiIXQL>zf*4kp9%` zp%r?0H>FDC@m39tCsYNTCpnITx22RGm%LDT$hMzt?bk<-ds-4QX%?!L^QA^{G42>z zb-s}MfGv41^y8|UBT|FZRFIPSA`3Bo#ey>wX6Xn^U#;VynLWwQ@M?;p=|=#B^Y7;t zO>0izSWyGFK4>u}dtdK60^Gc^Vfge}y2X7(FFj2X`Gx(1=jG_9JHq_-;bwk6{<7i2 z^nTp-;n#Hg`Z)Xgo$@w^&HeHF@8fXy`nX$7u5x@oo}Z78WA}9Y#m6Cd+qRmeDcPo3 zbZnYij5v1rvqzBp^6&Fg{RRm->+1*;ox7LeYKkP_7O%t#L56yy83J=;wD= zZ}(KXv+dR0Q=3D|;+BbDwN`A85G^x#tYIW@TGkL7EcM$A0HvPhj~Fd!HiU}n zZ%x@@1zJts6#!a1vs8!`1s6DkYMRsnq;r&gD|l+Zt8U-38)r9*1XDjNna_H#Lqomm z2h*PLT8tK**j{M9g4)-FD@C2{XhyUYMuaPT4Z6^RoZAK`m_cf@bZC*S%b6oAAf=*F z@dznsopQN>8t3wzf1tD-Hz)`}IgF1F7%h@@#9^xBPB95B&OJ3Cs_fRSAR^T+9WVo_ zzPE&$E;dS8NCG&zQ$nt&SX^=$S2mpCLnj1Nbe+D2$vlf0cdjy4WgqxC6l1-*4dFV~ zhjFlMGuRW{*{66bsKB!j1F1@>nEy<)GSp8F>&{*F#$SmD&keGzi$QEy>$R6aq~H;t z8SBD2|HQvo-nQGGzIF?FMsM7JJ=kqt3nKc81^60tyX7^y+Y!FNLxv zm|J6xR@ot1+%|cOuLZKPUFiMmV$$Y}uN$}(*W;Gszt_(Ux)y~Nl*g&vhU9T?bd{zu z3MsgtE+eEgCp}?QJE$dMSP$;dlAxi_ZZ96dRX169%h3FzVQvU1UYG8V3E$*Dldd8E z`{BvR^nV|p|HnRvnT?tGe|j@@t#fIA$cFTr*FV($?Jz-T_NTqY7r?z^`-X1g(pVYC zVUs9<^sgGRbREg5qv)-D|GseBv1-j9H>CD6bm^k8OhV2aOeeoIehm1p!F2JTjc0sw z@$!01e1jOFnen|VBLbi!WuAnf0tbgQ7(NfcqEY_bUTqdE9}KB;Z~Lf2!Vx`3&GYv1 z`cnP@KB#X5YbK0$5G&#JAR^+34<`pU(5!kp6`uNH#j*eh_+Bcy#dXG)iwVB+PGTx8 z5nNFi5=ebwPD+84Ma@bDrww96Lj{^4w@(UrwtEtw;sNwrp6IF@bE!beKt?-6iqp>P zyE6}ol5)Bz}z$Jn{F%3f#=bfI(aY{#u~qk|@ip)wbu~9{h(Vuq@@aD<{+ZK;;5X*K>reXaVXV zO$C49@wub!3AcW_0?Lw;YTt_j2fIaqVbv` z-6Dmch!WY>l8SIuMtb8^4LIs1UvC@pQ5nW5pLf5aCK%0VKs8a20$1x*C!UVWY zUM}vBV+%%NLZlG*5_v@cYQ8+YbEm(cG&Fn$5nwh7Rf8k*?$U>CsH>)z0nH9`eHmrA z$8&Y0R&!|2!}31_f$p~je6YcTt(Bb1xC}w&!LJ1F;^wVb53(pW-oM09Nrb!bx1#^} zT5&;eSUCnFp&KGFavVn60(>sC&6y!L=RPJozBA-tNC0B|D6we@sNlbxbS+nrq|REc zMC;qc=OnJeoz+D4!%m}`4IABT(6MEFw>&J>2LP%inzr(l#N2l}G>&0}ZvoJ+!p^XS zYD`nzdOo*Bs#lMK5cAlG8}hU)U?qUy);-JQwHD9&Hf{EhiHtGPul>p`#SnAR9b@zh z_ctzb?&O7KRXD-@{2-b#e|!;=rffo5u@iYIq?*F#2YwvfsfsE3LaxVVTwVyEKx)t} z%c_Di2(YjC9W552in7ndg7!_`5Q?))P2|zGZ3dnA=ViUo;Apxyc~CV)u;eTLZPO>_ zjI1C6xikL^OybKFe#c%9SB!_DX;ga_pZHjP7T4`Uxk&h)MF?xsF(A*3ay{8Ii&o=i zbg{*Je}HFtzjAEog1<2CYQUK_oLDq`GXcZ#oNdI^HG6dQuN+MAp;@*SduI7`bL?LA zBAE~0_9JB-0t#eK zQx4fc!ODcf%|z_L?gB|Dr9cS^Frdq)Ea{Sw#;nXM^p{?uRUxCRX#-19V^e9@8M-GK zx#_;?1)XydG_)O8EqS)%e~Mg$VAbA*RxwOwfKtOMIxis2*B?sRIYB)by20%y)KbW>E17iR`iQzpPZG zPy<+PT4$Q*3)Kv>LbXhQ_RWg;iFD@-RRFG3&TSUHLTgQ_1DoX^$Q}bsaw;oS>$x!_Ib;) zTI?0^tQc^wq#7pW2$XLDB(YZ3rmTgL8!-nc%6GeQ1Dic+rYPLahGEwe2dqX7q@v6d z(k>7QQ?0^%PM5~hg6GG7LXv$_GzUa&%9+-Cu)dyM3A$GPjn4<`sSJ}R#u=x0-&P{V z2)U5d>->{OY|X|Yz`(tM(VXZ3+~G}CwwCZiR0aloLumK$z@+A7)G0ZBY2wPyqQ6B3 zePJtOX!}aBgiAnNw2j7hY-VwS4x<+PdKSzeO2~#NIYe&IGNbY%TeN9i8KcPM%+y&* zRhgnw7y=4f!wZnT4=)^hWHft21~~;pXWCq>3KSj<%|^G#sOE5H%C=7+DZ~vSw2B3^S=F`p7fp6JG~+?V@R!TvOk*+b>{vjNINHL#`H z_#-m(jLbGDCyWzJy^S?j#a)f__KK9+0A%1~Wi9Y@7Z7O7c6d&uNUJ?r3^AfWk*MAjL0Fz|eyxDQcE~?z0Y_>M7&dO>` zlWTuIP^gs4`;%GnI1or^*u&oz&)5pt;pn8Kona*o5&V5GZ9*%}g|A}qVlTGOv1a!X zh7$RROLB8YtQ8w+pLEXD5NKL?Ty-iPfm-ps-pDI(w1IA)8g!G64jA~el~ zKf$^6OYFsaxrf`;G#H84ufKCq8^6_lK-=oKm`Y^7#}h{&%iY|au|N#6H<~54ijXq# zH@qpHa4&R~WC;V5i(Z*nFm_*OA)-JoGVa8OFC91V8RT(>i z0!AJ-tyj+x2mqqlMpjFzR4Jc6$Suo)KRURP#I%^N-z;UFM ztc#r4%A)u`?xba!A}G{P7Bh>;f*9~{QDCFa6o+5_@Id$=2gFDtTR(|`7hJRyhB~Ob z+}(V$|2AO()!DMu-y)J)8#HiUWB=%&dg=#=VZ@{cd?V>JV#|UbnDVXAY3fs5OEsoj z)>j6X7V@<>)YpW3)M0$rT9S$O$+oIDyS<n6(s?b__smQ9;8pEgtDwhr>8dz(-5wFd$G-5xZ`7E|L?3a{*4 zx%Wu78dj5ki-vs%0m>}u5%rqlwuSRR@jb0lcbx}84AV~R?)dkO*VwWZ*t*r8Imeqx z-ux+~4kL(3KXCG9>LNQ&rfObHNO#W6Uii?Rl}l`2ktoL)J2MsV0`Wy!Ok0z@&yI1|D!ENMx+ngxxZliwg% z*P0v+0*7}hCi_qM3gT{iox#Uv5OP8y6>6CP;{&;dS0fvhO*9kYQH)=w>?fsIsG{Fv z+um%nARqWH-);}5M&47~zG%zMXAiTWuctxQ zXj}6A*W9`iKoNpLyP{nVloxI1LP$jUle!C`uLX1YbX$5cq7H9!jcY&gI2<7W3M>U+ z3!qkSZ8T+AAFTB>Er56vEOmGxwiX*1qpSA)UdzDzOZsuf4CNY7%oT9{7?vKGkT^iO zAXC|BSeJFtQmEBEZKYDDr`E81bMhl2Vhz!=iTHbL)p|YyR98F%5zzBw1_cOOHJ41a zs-~ckHuDz&7YAC~OK5leJ-`|9po|QH;np)usN5nz3Is#d4;E^&P>=V_G(GC#B!m8qn>z<_tMDia24Ilbc zGzqp<+4J{6G!%xsPAr)L-cf`a5F+Qme=N)d*--{@mDUzN=51>~_*yE`*|WHBt(vZJ(L;Zumo1eH}k9pkJCN1s!HIY!&(uwiI)dx3qya}U91OO z+XGugt52|1*%BHcJi8@{OE;7A(9`?7HfQw-LiE1e!pmrm<{C&2qS;it+h|Tw>wyen zOBqAq@FsbA*9uu4HRoB#XEMkag#@OT>82&C1g4W+-$PNR!XPh-L$b&7#`g}Hh|GV=zcc^H7b2zTXVQzP!e2YpH4EHT zbw?HmQPfZCcum3YI}u7%1?yB!zjDktg@nbBf@F^*4uppS64`JBL{RUx&a8ZX+j1^S z5cKR(gCYWHOF0QyFqK_@7zy7}VzEhLQ=CrivW9&sW!FBsiZM&<0u#uYpdaMt%i7dQk==e;6EVXEG0RbRz6J+0LH ze2fHQu({cgHopc|k>jLl#fMcs4#NnmEFmH80h!3wekn7Bc!^vW*OroN2vz z6w};7-3|#^@;EdbrZE1do1q?!JVZ1~1ZBz8V(qPmmnwji@UL^5Hji;Q%~43>U7$)B zLTbjMI|?O6hDMzE@26e!{4``|4k=0GnrZj34ietzq2xE2Joi9gLO8mYddSnhQ-`~A zPA9)Us>cnnK*>thFaR9ehReQIHY9sPS+|X;_l2zb04Dpjs4buN-MTOylmI4~+J%;T z7o!7VNdB^FDYH&VD{dNNNRR%^6W2H(!TiD=UYtg`=<+#LEt9SIHc(cUW;-or;u2r2 zA^~=U8zHz{ayZBJY70<~9Zevh|2Ptg__?`r2C2}~O7?2=d*vO9Lm1~8%n%C@6Z2mn zu=6aU%Q-Gacey~Z#o}e-efQ^`^d<{h3}No-Rcn(_7K>*xRyLV!aljMiP3wMsIGPlO z%D+;efj?Q60!_~CWQQ4l3_0{bS13Mpu)TInRneIfB_Lu$aiP1lg-fKyztuHaTAS5M*eHEjNGj6GmSZuy8`;Bq6rN*~|puF{+^svjrQgL%+~>bv0QDB2GDk%&ONd z^GT(BT+W0u0|D%ZU!BTT%eUS&)VFqR4EP=T@b1DMFY91nzU zg1+CUxN}a5WQaV~lsfaNbo$uR%Xkuk3MiRSi+v zDhOeaFA;9?cM-=2o@LR3L}x9}2r7vtR=)y1rH>^O6mEE`XukHl$s6f@TLc~^>si$f z;%la_JokI%%spkJZWCx8mOHlEFG>G#-?s@blm`POT~D0V6onRSBy-riQ&{ zZ?)q&3OQW6s)z%h9y}nzfDdgI8d|LC%*JmGPN;#c?&c5;)JawMoS!qi z`$pkE;FVdOvJqhYVu&fP+f}>`PrzN+GsnD(S2RI$5s_OqEptDQqwmY7)rOaj5)=-F zAhpC2+D*^P;rtcp!|XDA#uOd)(_^jVgw*>8yGzu)>&v&B){V7M!$t|$)O9s^_KC;J zJV7!eR1do^v8A6~ta2PRa2Y5$UG;JhGEOSFjw!IwfN)e73n8?VoJQFj>I-#npxEY( zoLh8`UiOt3MnjAe-W_L-&0+!{3J+zK=onBW`FbRqWGDeet(ARG$tfDk&$8U#&WmTK z*?olIx&68LR0?o~;Z=oI`n&2g1r$4SY2QeTpV275Ukk5Z>r8T|<`hp(Ej@KQGT%(yKhssKXH#O@d^iHmt5-#vqucHE`!f1HUJ@bChaj@!MA&IR@te<#p=>%)c7OC;J~G(CR2my6 ztIeriRIGeoPCjnwcX&?7MZTF)J&_D?mWK>><#s{8?roIX`X?%?*@+|f;{BYQgx zHJk}xc6q&sFn0{8?n&M@)G*=tFkr`hO9$aqv6v|YncXW_She!+KPexK#D>;%qcazD zBrbjv+Nd|3{E3jXFV-(1l&x5sQ`vrn@Bf_mPHh)#cvMUhwg=+5`x$hHYL8>pVo{(7n(L?m1s&3I zhOi;1TvZU@!3I)%(uWVg690!mko7+#889=kGyYGhh+3_2r$Y{;-cM>5Y|f#e$XJjv zc~#b4u~iq@byVlG8(>*Mq~U`Foe4GnZxS>qAlj%S5nY=kqZ4ToC-C4AH$)o09!Rg> zUH+Y|-+?zEa0xIZdOUXM4x~HnhJk2>f`9{26eJS#`1OO=!L!pg+UTUEJc1h~XfFLkr&g>m%=K*U{G?4H1NrYc4GF=ydDV9QfcxBqA(G z$$=E46a#q%moCkj04RtdzG8)KnE^1(Ojn95`@eK~#5kz^<)84 zo@n1)1tew(QSAZRQ>)5LqYq+J_VJ2f`K- zVx6G6*|XTb#d5$f5dm+orVUi;!Y|R{5Y6{p%;?W|9b5bU#>lIG%3Vt@^{}OT2p$qN zob8D8#u?U3LlQ?Zq<%&IR?d`cAJs zA>Ru{95R`Ca8X7M#Pmkt&*bvPi9@{8*pq(jf77i6!?+A(3MI4C@QUPtLf zEm`N3>_0lM?yXvE_54e)IAB#x3HL_`#b8~Y(zp&J5FRR^nA0kgqEwAcYW<<#vJVXN z&qHZjzr}oCbGm%O^PeUQw-+|HBC1gWzm4kUE~$R1QK#G$(=8Hi(C?E_5EwEj-yAf{ z=b(KrT*VPlxd zVA0r8+cU7IgpuN&ytYQszEaVi+nT| z^6-~F%wQtVAi%SLK%v6XXUaGmHZT$45zdU@67s-~vui(mDWz3^8%p4IoEx49$V+&A z`}tCzEi!?tgY;a$ke1+tqWTnh;sG7UlAF~)KFnIokEmLiYP9;Oe82od#jd|vu{?@5s1Su%om;CPe8E-Y_wxfA0U01SnklZm5S)Y zvsn49>KRZvV1!nnDk$K{|Jp*lJak+br-b#~%ate6=U>Oh&3hWw*NY4s!iZfUJjOBh9VRYXiG48WB&XpYZj^24jKEw2W;@+f_% zKU96lU=t81q=qhzJ^P&(LnH6!)zRSzz6*_yu8Nj@L{guClcAHODK}5*=^ZaO#%3o|gcHlL4R&EEsuiyjf($~0f*1@ISkaa%=MSmI1JtAnF zl2@kiF0jt%KA}b~s^}L@sog}KWR#%DQT*u3@ZnL}50g!pZ^9>@M*sX{!aKZDD~-a* zDs`>}?X)uG%l;jg{`Dk@5Z48m@KF`4)?niT1D`g+w?0y7_xmJ_yJgJVvB*v;QU$9a z+fdV_70yMM4w_PI$)}eu9n^8e=d!#as}08zDqi?Z*mJZ%j$6r4h!K3SS}bv3rM*TQ zxXjv6v3%E-bI1&486AQ7_F*A6B<6|YnHfuTUJpQ#9Sq_reV1o*3_^itfD+g$7k&^J zzz6wSurPn!Odjq6ret1P@S4zpWLw>IZ)8|vXg0MXpw~Y|_dL1VUlu!k6zLk(`mlL$ z^ZOdl?!TSGmuGmQ5I-@8LrA_ped`Yv&HD9^?5PD}(4VSa56U2D)92axI$dBF5tj?X z+QwAmM=1+kC5Fe5==-WT*qSy4JBlFEXgHfJ+>90E{J1bxAeBBV2_PO-i`#P(1sY0& zw@s?pI0N;lA?Ocqs#V&?&VLpuna*Z$K8%yix!JUPnSXw9cMEBvpUNQ#eED7HUC3|Q zT2Ei>QB++{i`8-;{(@`47DfpFsM~1EoWPdW_^TCB#TLx)4X~C|ChCi~bpJ-{E|gU$ zXIkHU;N#+)m3x-owH}$+tt6{G$mPUr9tiH4SpTD@>Ij+SI-%sHfI4WlwL}+l#$VDMzwv(*0OT@l-G3--OT+x!c`i;pR0l zUgS{8cLBG!tzv6Ozo7LSKX7p6Yx$7Ny_WxAD~<5N5E!2aAvB@58gEWeD}9A*|8&Z2 zte<-ZY!tzcXPBrza)2RuHqV>%Nk)BZyQy0U*&&1c${J&*j%Yra|JcQHQj>JzbqO!1 zC&m{)shs>+uQ(8AvR1s2)9Gq|Azi`Q+Ah3X7S+DV%W=8w7?JJn2Q8O<9@Ozx)dNY- z8&-Zw=b_l9ZgEDD^kReH{Kvwh1sp4JaUfTWjbY`b^WN%FVVwqKHc9zxm0y8{1+8$j zkgSAY$j1OZu0CHvOraAZA5MxznXOiB!UvocOb$|5=P4uOB5A@Dn0i^gNV#??KXw}z zUl%og9|4h(BJZ2YQHF=?Ny9;)XKADM>}my?VkV=&1&PSX#S9T=XSTmgHSzLKa0`#q zdt(K*HgR{0`X+lakuytn)!3D)%`a#6Te$Zk#*?(2y&KgI_GEx{1ZnJHp|X(qyIR63 z2X(zTmam6oq0NI@6JEwuZa1z71rQA{S9WVk^r-Lbu#iBEgE(g|$<2(o%+a%)@)MzI z&31z%H-C)^W;q>vFp!|)<>Ml1Yh$DqF0zBG1Z(znLbTKlvdZu1l}AE%GpH~{diNS` z9>pe#r1ux{5E}`1tKF-Xl6Mi&lhFm?Esqcq9A~@&{^PJ5F7eHP`V>sy0&mfW0y~v- zmhUN$*TWIq=z!S94ZN6>gNI z#8D9aGXbd7oxwZ6MldcAXch&8{D8a5x=RPD%qikuNED+Na_=*9APID~oEKYL5^m_W!mfsGhQqPx#%xGJmLA=bpYk}gOCdx|qUfrKnho4q2S&Rw1_8?>TxKbh?O zjq)9&*uY@c9`$Tx?LtAF^_1=~Qie`IzqhCN8QM_{u5%tieTrnuy(&B9WQ+is-aN@? zn5>Yzzbx4wek9;7r)LUnjmnjfnc*&-2`sKMY)tkho;O&YC=U2)$ZmRq;1tHD8$XhN*U2v0S^TgmiKK2ZkxxLM3 z2Y#<^*DTWuyPlV~YJ>X~%Rx_ip(p45=oEN&{{a`V{U=<+@qYxY1pn`ZH(e!Z`49$# zzDMelH8Q2mp|)so;i!4*jMq68&ENNq~7A^Fh zoTp{;3NA7YW{u#)?+rVluiUbI@H)ZQIaRtpteIYuXWH)>TPfq}L_Ef`Pw@tN45fyv z)=Bfhu%R#jf5;xwBo5tx3{tf zRV!$1hFMix6jauJ8I2C~s`=`kO_%^3E|*)lgS~n3w%?~EGnpF`6R2u63!Qto2j!!_ z5Wj%9m1{-+Lo?a`dx{Vv0TVkb(|?JRnFyGe*cn*=>+zr0;eRa&m{^!N|38<*|98_{ z+FdnLc0YJ!+FefPwn?|Qx2NZ(=C-#ewWM5W)gY}KNEOgv9t@664iP{osx34Fwm3O8SOeSgQP0GDcb2r3gG;NSpJv;uGtKwN@3Y5~*w08k6UL)+@16OacC z?%@@{yS*Eh1QKd_A;usi6M?$ly4E*0JiqD&rzbwT7jA7N*#e3}Q;F9$x99N; z0Gq%lnkpLrRR(tuig^P7VSqG%u4!^?01U7L*c9*!ib;zrK@%2L78O^GOoCBX9$Xv& zyT9?#DQRtSIne@ILaN$e04gSd5*Ftde!kVQA%gDOO#v&cgunVf1%Uj^tH&&)EwC#l z9h!difCG^CKwX^Mf45)!JLUy50DlyMOEx+JbAK%X3>qHq91u;+UteC#nx9=>4S>7X zn>snZhvheCc5wG#-JC%L__hP&2K+G52f?;U55kXav*}1mL0J<=q3` z`Ps(k=dynEK>`6N<=NYJc~yR{oj&EW{gu-}gw@Qhj_@t^zx%n(03TdlKc%yO_1aJ| zj_hu4_J8W51Oj4vk?+{OUw6ID;6FyohzhF+sEbRdt6(sB5UQatir^xqher?d&vu_l zN>V`q>p9;5a)5XM;KmXr0%}SJW@ZppZYcVXliR}2jsV>rO@IAQHV{Exz}|oR-LSnA zTBq%gYk76oTm@e0@&rK7f1|@P6n@rh0`UOg0On8uo*J8sf46V)E#GZVzHGzB5YBFa z+yK`!I68rWuWbVo;8FbDq3H<*hNqD+&VJhu`w^kY`3E+3CV-jF5{82w~lh!dy{YdMStW&@b1{v!BiWvn?o0W->$YzuYChnE?)4|+^xZ(=p~tSI18i~w z5@g>;OCCQtI0aA89EVTfHhEm3GyT?e+weeN%=!+N3wBie{3}`g3f2?qEd3Hl zxKHy#Ea+as2f3{N1QTq#{`@O#|L@W*e9#l~8$43L8_f>^1oPxCfgGMh1*wS;VfZ6I zB0}=AKLS0;4%8J$W|F_QhlihbPVVp0(NO@+_y;}2Jo;NXP{=ud@~1k0$vm4s0eVSs z>~}uM&FE5je;bn0&LE|Ro9F^0eQ$){zOlL3c?YLGPaL4vHz_rJNkn(=EIu0o<5n)s*7Xk+%=vFQExm~$ zo}1l3e;FuIKsftbJ%|MCY(Ieseb2vrn(g?@B9UyK(nC<*exip+T)&3nlqBKLUF+BW ze9o8sd|LgUt{l8Q)_nH6=lM6Jg=4QFR+!tvdhUKwi;N5nPw$LI06QH!2wf%Q`~R9h z=)+q4Zl(E~N=pU#erb9VSQ{LNO<|D3v!C9^?m>Rl>s0&q`h7WX3*t@u{_Vf@13)+f zZV}S_1ZhKxau~CUt%6FT{O8qKj%vVNJA%HfE)%LfnR`h_nBvzh4~jw!Z3{nMObtvu z37rLE8WOZ~z9_cG$!qUk(x2bkw1U9j0HFj)B$%F&30rwnYQ&>NL&aFJ zr#W^hb4>z%CW9vp>GHZw>NMSBplhatsqSuvHtd~F@7T8A#cB9iV}$gYP&4x^;N7#e zPe!f*BT>Uho0TrIFHc3(@$|ay6DCK2?yW(4NXo$+JSu-djo?$pYbx`J;EU;Mw6(2P zT$_6W@qCeecvi-~?D%sBuE(^h52<2r3c*ysDnmXaWpD0Wsjq_0)X^0#y%OeP+rp-J z`|y-)kljdpkdMc%m`xt-#&I+BRwrHb2klk(j+}CMjiFw?HnPhtLy6-xj`G{_8-eSS zqGG}?@y=~7>LCT@;mU?>-J(IVqca34D`yqfq`$4gRAg*zd>2+%7~I2a%M zpzqtfmui)cy`k+MhKFDXwt>R5NDf8rlEjjQIIc7Kvzgk6aCG9$R7__;;1_v%$xrUG zPv*Oh5k8XJTw(LuUWJkytLmuts2gOCzLZ3nJd~mD_C?^D2X{tiaA?Ka5=Oq8L73K~ zwL&NF=;9w;YG+^PTWitRLdE3KHIi=c8Ol-jEwqz0Zw<6p8or2AJ|aew3PyeIz3XKk z7}l+^az!CdXtjyuJX*>~F9piAQEU51xpX@&82_4?jP5xRN7tSsrf;k0T~nI{qd25H zyvv-k-b8=~RCeFMLX|k_S7&cxWQcQ}@~jGm%8JHk9muZiMKRJt&H}hyE=aYH*bX;$ zUWqQ17(Tu@sN0p$hSg-wPH+hdX|B(~gRM|$f~_`2qq@Eiaj*y2^t2{v5qneU&F|P% zgQB8MYRCL|S=ts`kVw%)-UV14yGt0MQ9odyQg8cwej2>(mDpJa)4pXn+NU{>thysb zlVL?uhQ{J#@QARq$B4E(6Fv#Ofr&@E!AR&eSU+bgYmw!yY}q^#nHHu`q#LExfa+(P zUpHbMptduNijNo0)_fimgbng!)kCx*E<*5#9~dYcG(H3f(A>{L%>;WhL*Y^&TpjU4-Q>eHWX{Ziup^6~6Z@$(~Ur-TVLo|MF zR^pqbw{h8M+3XAO9wN~^lhA#N~0t8RHn81s`wW{XFojZ=2_ z>t&CRj6^2U&kNmcDtm(`Qrx~A|M+9Q27aN36-J`jUP*nWC=-^3?CcVcSzrn0q!mxN zyshHQ6l{r*I-2Aarp!O13G0^i zkI`aH9xOB%4+~oZ(r2cXjxLIaHZrrF)CNmxktI6ZePSh(Y**xP#aE zl2(8a{$|9$9ZbqdY>WbBVm2?PRr^N%7{Oq-6z8n=o6*!K{z|@W3g&Qkc)xi>f_8>&C~fZpzQ_QX*a1b{eW< z&5zzb@7c^-h>B~KXH9|^Et6OyQkE%uLw~Jt z5TkT|)`79h=A9!@Omd;837K_wJezUjP4BPRP1)BBVeSTG{9YYNbM2t7|+$-Za>69LGv^BVv!P6rK`E_ZeSRT zE2(tOo19K>g}$#CTCj%@W+!r%y6!&B7K-*=?5qlz z%OiG?uqI?pxc+giI;M$&|MH~SBb&hO=*4OA^4|k+U!N6lo#6?T6A@_}Al(kJFgc@= z>rK_wgX4XCuu}Y0VHzy4h{?Mk;EzTnR@t>;njof;;(Uf>m8A!BJ}Sl#1>0&XLCx^U zrFv_GLE>)EFmb=Y%L)eiqDx6Ma{Cb8y&2Ba`|?+oiu<-z(~2k648KyPrMyF@{_s3= z%lddN$z$3F)p$A?8!|8Y?^g9svUyh||C8|7a>;dS$+>G2aMba==)RbM`%3lUY5wyA zBMyHkgimI~D^;jBT9I_~c2Sh-WJ(~32*qc>6Ce`~;DWj5zoWCyD4R(8gd=eL8S_iz zS>KUki!d20S7f5RV&-#KnFW0jm@GQYHx~S%nPnD|qJsX1Rk6r}ppnbA&o;ZZrnSW7 z7{z%-uY5ihkH?B++>+cEJi-%cfz2!&FR{}@>qM)tW^+Wa(+-=zjceQ@f^P{51d8lI zZX2E>1TLN``j&(W#h$JT1x0|Oe$CNlKWU!vF6C$Y1uA^gMJ9Ep0NW`w{60c)YgTU) z2w^WYBP8gsZ_T|6%)`57!+GlCII%+p#T^|C*2fkEDH4oD7f+*&T&(5}Q^BqrP6<-p zqp^T0*XK|v-il!d4>tJ)K*1#wSS#jWL*O%{9@~@*i!mqCVmkOQ8$qCHgKRiLrJs=K ze)V&n-QUmYL+E|U=H zKZ$UyZX3lZvyE~M<0h3raY}Z;tPp3Z2E(I`#YSS(-36Pr%mM6v83%bMED@`FbBn*B zf12}|uw5o6mm!%XEj9~P1}706+hFtPfhXQ!ge`!f?kDs9!A|pFcsc_0-S1-J&Y7`$ zm9NBk`mjl%Vm2adG{acUoB&*V>N9<@DLO8s`xqE+?N#TTOJKz{xmiAQ3f*8|*72T( zdr-|y$)1vq2p3GW%!jv7)}p`c*0lGGT`}K(S$yp7T|*JrN`9AP(|N~izUq^8MY&*6KLJhsTd?2_NN#tddZ$MC zK1UkRa&dm0P#Un95cG&z%uxO+&dym>HEYd_81@;yJt=?jLt@+oc)uV9U6(v6ovh*_*{683=P7RYE?GMu@vtj`Jc z?{E)Y$Gr1Eg_rK{j1aqTUy{DjxzcYj@kFd{rS4XTL{?J79V?3W1wrjP7Btd$;g0XV zW&WG3lcJP;iso2&i3=LWlaY;|Rd#?Cp7(3}Duh8)FAdJ_Az6yv{A7R~!%HKAt_0Lf z_UW0{#ZwyLtKk%6SQd&7ea>UDqv?FRLdHX1V}+a3SB2Q&Xca2nGZ@)C@ak;7%GM2} zEU91Y-MpGS@nO2=sQ#-PHqo3*YC%s4>B=}{hldkrZl{?I{&i46G_tAS!SL*Co2OT{ zXjNaYPo&)uRN0`*x+lAiVumYqB!%%Ui{QvZ%}O0Qn~ZJWk^)o&C@6MAxXLwKmfl0R z1>HDHd{Sa4RmgNjdlw`BtllGeb9_f8BzC{Cf!p=INXQc%4+5LI5WopL(jAE07* zdssHkXrI|Wd5Ef~INNM*qCwvVE?0~UN5H9gt}{wRRK$)7#BIe`X3|{`!%z$XZOjPS5TrpuMuZcCl6KTh9RaQNgRQeqP;d|nY(dOhwpI4e2xb?9<6&?uHRDU{HqjrK zf-%5S@oKCkn~_7*Rcs(4=<>9C|Ai#ms6nI@!i;n9P>d zA!3*(m*3ZtHYxpk^vN4n3MPeqljWc?wh2{GqJH1T9A*`ccYa`PJ$Vvd^x8m#pd@&O zw=H*v2V<3c=7y>hvr{noQvE~zLw}lIjL`)&XLqc9#TVwstik>%gER3eH{-Xvo@pNC zv;A$-Z&J)v@oUlwwa0x9mJE|mgfZGbW+LpUE1(5@n2C^(D^+{n)ih!NY~m5P(K#Sruc@Ql@1?69L2U3t@j65qlD)vmJ_;pK6kMIgNnbG>W}%WNVj zCJ)EYB}(?pW>3jhZE;M0cccL1V2W2jWP!MpeKTo-cT1M-Y_h~c3ntu_iUF2A_w?CDu}{@ZhQ zDA#~hDLyXw+@+zk&Lm&B+A){aU|-z2MWy((&w$O>J))8U&5&y70bivoE`kP$lYxxNGITT9Z$^{`joqzQ}~9{5=5niJk$`0|#z zbmwU=v;$3J1zxXJdCDPf4+_g3@LCAPo`GCswZvvAO1?<*K(H?SDB^Xl5I^7rnqi@ zUOOH3(d`2w!rOlsTxUi2D#FAdm`1H!S8_Fw8Sgk%Czhb_p)QCs4F}j;kXTwVsEx#FH zbM{)jaYs)Lt2l~qM9WX?LY;Z_Mhf<<;kv%mhoDAc8cz#s@H4#Q8}m;@gfUdfE`EYY zq!ZJ6cBIhsvbVir39c%0%_321+Ha(r78bEa!|In)6t)}h%?Wp@NFpS~K(ts5?Qq^_tO^^H3o7NLyjN(zyG`A46cx zj8cPle}o82-(?%eZs8Kas++2=EBwt+r$nTeUX|tTJ)1m%LrYZNh$0#&4}osTP^^;p zu_osmAo!`~V?_7PKncu+k*NXt0e*W_f#AxcxWm+)r>~-4yCV98@nx6RltYvVHy+#% zp};4`F&l3E%0~F`jpZi?Vi7y3afcLk55&8vS@u*O(vGef9QkGbvO^ZUx-0>|DLsPa z{jse;wy>A=&m`PZ7cx6K-r2)xz{!;;VVaF$bDw=<|CebhXV?$(oe`*e3;4Q!b?*)b?oXV+}p*Al8j_f132+yhye_xS9LL|4na7zBKGJm%cB?MbnGz)wt=wns9r04PxYo z55jX}LD?nAo#^`}rQQg{Sp;IM*fHs{LCK<$t~t!z$Ffrs2SHo|j1qDG8uIuStE#bl z4BzT^4iViQduyoLIXPgrFTd%E%0hZX5PcKY`1z#6h*0;(y>64Qsu)Ix zzc3gwxcB<17s8Wl=2u;2`P>ry2A24%EH}?*PJ@9p5&Dx-dE+j3E`d#C&%=tl6VRE1D>jLo|7Juj?y859S} z!Z0iFnP>~ad1pf5NdTd3k;Nx)*B+^1yK>L&bGIFfjAl*O{kG%*GQU6FRFQBjNkKL+ zCQ$WPwclY4wGu6pI;iB^lw?{%QKEBc1Am+2lPMQ&4*!=%POu6JrY`dFYk1rnsiT@# zdXYR^EK+KMUG$t-cE|wdT5Vf>n8;70bVlBqLZ)1FK>nr|H3A!E0$_SWj zK8@uR740Qk1YlS!Ur=&F(klQW2tbw%y1xYTyCZm5Ps(EWbaiyWFP(A(Y$J!!mib&? zUJcR{G)?0%YV^L7jwZqCm6qkqShkU@z`6T*DBzfAwJt**lcLzo#CN|mC*ZMH@SUa6 ztpHgVdhGeZ<0#qgR4^xncXoJ@D47FcaOG#U1slfJyEFVgVifd=l9e5t5WFb)Q18mI zJFnTz)01{Q<`k(#n+4+xm1cU$17*|1%=LBoGo)zVS6z*KC{@+*An!;AVF!QyroyzY z@*&Ew1wiSPCVh9Yeg>Sn${zB3^q=Mo3Z4ZdyNx*!|TP)`;-fpQCO+RY1tMxSP;VlRAw!`Cwf zu|u;cbtJD#!h^_^ax^o{t(X$z+?GdBB7cP6Kf7ZWDY zvqQS=Mv%7k%~--BeCxk2b7QLf*yT*?7fNT`+B?|_f6`-0{T&B!-!*3Spslkrq}LOC z{W4Ruzw{53oay%jRlS80ElFr+v{J7})=6$)N*)X@-^?B_elY{~u}E4eGfA=G;o3-w zcLw-SIjbg38R4DXT%q)uK<8S7SQFM(FoWv+Ag7C2ASKp9EzoLKYdQ$6A>Kb1vv|Wjunn6 zX>$*s_Bc=yobAWkvF?C6Yq)#2dMBk_rlJwiM)9$ft#@|AQN9K?ac|_rOiWTK5dE^c zxkdVRyvmBrsgu!nj6Ul#D`&Uyadg;z#tr3L%iV^j+wXz%x-qR#uCGF|d~1qsr&XE3 z|1)x?*B6!nx2vW?^7NbP;3!&H==0e(8a<&6WB-%WM$?2%WG>i^vm~9_? zRJnxZ=($L*A4ZDl_0SjDyCu;q+c8YX>1gNc6IWhu|=~U zNvP~>ama|tsF9T@xlP2$SEp&_Y-QS)&CS^O%RH3uL=Wt(u;R=y!as-+!AusNecYVS zBZ(pwqi^*Vj6BLkd9tZ= zk`X$)E5S#~WpXt*{gBeKQ#?C?>gu%K$Y=T}sUUC#Y8e9}x0+%gM#g}&D|Ij~9AyZ` z!{Ze{Gqzw;VABC~$OYHKf!`pt!%;zp^h$F(?>+Mu`2ozk5F zLqAluF27e}*fN5lR(K8yd*8}~^~qcxnAS_#nEDjVNE^|~Bu9j>6hP}mCy^!ANR81Nd%j^xk#O-MZlWo)iiqU7 zF1+$$!#{t;(_wi9w;}8}Ncck!+g&W3ZXklo@$J%@(SQ*Ri~Bpy(i}DPOhjzE#p%?M z@a}|CDwv%UxRYw~UJh}5fok~&o}f4*@>lRm(`u?mDdhebmzZ4swfGRny%*cIZ@6LF9gLz&M zc-Vrgo|R6r(1*=Y+m*?0Sb#wEZo1A|!hbPpxw zl&vIav#u;?Xx)>lu?kG#3%8R%)Hv%kKA* zU4jv{RQE`WklRn%gsPMv+O(c)S=XX@laW?AfT(-)#?5b1U~G9519hdpdQV2` zD<$Nc#^l?W#Wc3>uIiXUg0jcAX>lD}wnXFB-2`|cw0@krPd>J)aoz}J&B5&wl%(cD z;Y#(wS08DQK{g;fonjoa_LchRteG~>uA!!8Dx4ds8B_<78zG}Eab)p%TEuqh&g^Jo zC~B_dG|5btz9qzv8qu3i6 z{o-ql>kl(Dp@xLesrjoiwKASv<4qWq${lH*@Py#OPg1PxJ~2zUbl$GZWU3A_$2+b{ zt=Ufz8@Ctf(ccCd{Iu43(FY?;?S3;1Pu;^ebeO-6>>dsETPi2bC)bNQzKB5bMVlUMNUK z`~A&#i53b=797&q3Mx7WoIpmPseI6Jn>9Ip0h(m%i!_yPL<`2SO=_1Q8I=^BJscpdH$?jG(^0SN8fk+tbqgG+(2VocAQ_G}V_wbCXrYrwqF zVqXFJp9Y+1_H#vXJg<1_oy#7eZmsBL8NzXR_P)|Te}{94e@aF&y)TI{=MuFTl%sx( zWW1ul!M#Ztoh4nJbw?8nX~{U@nPzw$fS9o|6Z4UfASuzL8A)z`@lKE)?QzXHG;h7qulS|A0ONm`x00 zP4Io9T535{GOZN_%pT5zfI(34FtL8_)vpJvS)wuDb-16PUVX3!pJGz2q<NJ25P*I4^}=U~u^MwH$(A?Y zF~rf$_lns+E`{p&?vFq(km7aA;Wtxq7*?sl^kLW_2QMD0(iuqagmXI>o5cdNLSDg@ z1=5kl=`XTjmhbc|e~oA0p5gm0bQ%*DxM8kwE~{Zs6d%3DicpR4I2vCUa-i4$L!uw4 zIrSX)$lo=}dD@z$x^DM{elMZwSy9LVXpWpBAwaB9x6nw66{7aVLG)*6PL6c%$DJ1z zmE*19w&{F4yc4F5c@%ukUKsnD7%iqoJ9V3=$zD0`DBy)wGP~`iWmftyJ=Kp>$L za^L$;e5m-BYqxLqVYi`^;-EMb4KB!KW5m7i2uiTB`37MV5Jj|mQc1(AMk$=+rHsQ8 zCs2#*Y8sx-bv{!@2AQ3^UzO_Z`^(U9YMWa&Q%Ac|~1shW;Hj(fd^2^{3|450cnl>9CVkbD>f$TVd9TwgAr( zcCRQjkeLbVhv;`T`_8!;nKIAtNHVL-d-vC-jjn{~_NKYxv%_&cT`C?U^7~X{B8_Wt zpL?#Nv}~S>?l40awaYrv8IX(=Yh$Lu1q%dhZ}9e)xb|+B)pc63A1vQF&GgD@b4bQ& zDCkI4j~6Lq4+JU!%a!YmtY$E>x$3YlCHS`` zW=mjMTHEKHZZz-)NK};xX!JymSSVlu5hEaiKQu2VWqtfPZF;TR9@HmwT&?oss~#=n3p1_;L(Dmi7gE^ zqY!;B<+T>Du62i?y-c{81?TjxejF+d*_pIJ_jiPExme86LhXMD?wXPI@IV*yn92B1 zak-Z;h9w#_Yv({q%f)vh!4X{q;8O66ZoHJ~gpEfe)glre&JYQoq?Ia8^+cyk6U=BXM7?4qr`C7Dc9w>to+yLA~miR1{5??etLmt47(BL-dL^UM;mPY zeB(()es@?=`F=d>qW2hYy!a-g#zW0mZ0U>KPc=H>bm=%dzDSGQVLW_S#X`lNO+Fyn z_5HpNr|GmpmIjui)Y>;je4M= zK0+`~8)B8LCW?EcGXskkx`~Ri_iRRw?l?@-yi4&q znN4tT1qS9OV814wEh#ly{W7p_VmxA>74U7<54JT)IDLgiJ4}${sm+|v>OXdZspIenMVY0y;zc(8kYDGUuedM2T+(_?bxhOYCA1Y;!+ zQ?9cP*-$A@av`HfsF?Vn^=iEC;oVG~#Y4OLU^c&Bya3G*{ON3wQ@3=!PrPK1esi>a zV}iazpZDDh)|>9aQ``;pU(#5pZ?5n)+t67ffzTx=3e^t8&?T?q3T}R2RJ4s_KOk%E zpo(Jp@j!JXZhyi;LaaB((2(2@sWFC9)X+dwO%x4m;Ez%X-+JQ%O4}9nM*tcGBt{0N zPC>UT4VlOmj!tFQ_E!#tS$*Kt5dtJHnZA}C%&Does?8#b?&q)=95ss-ks%xS(S-_K+(B#bS@YoxUCXB#;)(m`w(t@1QRiQHOYUJ1htF;gg_QMGTE z$+Tfp96FUlOxBU{52w}Agx}E|7`K~T%%jYt}{pUWBx977$PRnNPi}i~$oFtscee{ms->_T8>(k&R-(GC` z;B7r^d#E@DCy&wd9q^WSe%*=dgaaV>5ag%t@2})Cb1Y4X%sNIqN~<$;5%90o(iTrn z)Uh+Auko5r-EeSthi9`iDaKrorabp{N_Hvb~s((iunVX=Iapj-bm&D^}o;l;u zjfhMT{u1=P^L#63e&wNd`bd-N=t-~Cv~lt#zL7Kpa|CHrVZLoCjWdGDCM-d@1|bOS zUJDqjy+ruoU}4_*9x3;tt+5s()iAcEym_0v?ld$cQ(V4VoF!t*S-#J9%xy>^ zi?{HVv0~!kQLPfUKu(Y5eTd9`@45XGu|jK#OPYGFOO0U3b=;WgbymFHi4%1R62sZr zQK@R$L7H~N!MzNRa`58P;=6di2)sa|jm*~{3)+u6`HHi4Uk=@VTwp3`Dd{{ZS7;D9 z<{#o6p&U>|`rRp7OiYqG9vej_Ee_-n1i!>dzVIY(SC6k1kcko{C!B@L!zzBXDvpU= zvcToA%&d%;bd2QFJE5{pAW$X)a_0#cIt?^ni- ztsWem`9n8MC*{dlSi!cb^>vqvueN}16{zsR=`Ylqnr*b?O2l~6IiFdAHIqQOD?S0* z$bOG&ZJXbB4mp@tz+zM9YqwPru-|q17H8E-V*Q^*--~>p@3UpC82%aGAb}!WjWS>v zV=h2E#S27D641zF_H&aItsb(x4XH@dohXQIvV5_tShXXQ6ro`fg^SkD_`vEA{Elz+ z-JT(ki&x}ih^hOImnHcrI>G@?`oVfyy9YFREU@9IAYj5VAjPl2{lmM-Rx(42>Pv-H zzFp|C(6>V6^-=}+U1Z3u8&bFGO$yq-wWJ2pF_T5{G-+iqusf;QBkct&L*5|x1Gj5z3=rSY}tcptW`KU+D6yCe+El!PG}`4 z`fO3=qdzU_Il?@s#i$4NxbblMRjW1qQ-YP`$WE9))eiSf_vzdid4W(6_w{sef6MWl zuhu0gIC&7Y&zvcVsI#1+s;6yCg7LO$S}SF~Y$yH87$ zJ&pEK$n=vVG9+hy;?hV=A1Mhz-->5#xq6JPcsTQ&K=A=p{`5~T7~vgM@pnVObixAM zy~h~L7;v>(D$;hqOF?2hjDkCBEJ;eE9KmTEc7Z)=fO<~?2o`Sm-uMc!R9sr@?%^= zpi-C(o(XHY&1JdH&n5f8&(YUbussVa#J;l zlKrH0XeriO_S-7c{bxF{fi$#g-+iSTt7iIoFA=;Kz!YCIwrMZV&&gQ7z3pEqZHy9j zgBfX~Dg?DDuYBoPXnbyN#y5Ll&CybhOMbB-b78)N^@%orJ7vw2g8}nNA!5J-absX2 z93WR8Ywa9@2CuN2yIWPDpn009C#N$!|@$>uYQ-dxf7q_zx(y_M8+ulP$&FW;FI@~d{)JO@vAv@T0~9k}VKlp%GX8H#*2+J-XyW$jjY!y(PS zr0u_6v^$v_@WQD11J^{}i(|&qW>6jTJ-~`XfVSR*3m-n^Ngj8&&hCdvR7DN!>6CAk z$tS=9L-rg<(%tOc%+MBD-p?+++YS^WMZrls4^}iD%E_YBkw5}AlU`dZL*9HJEY1tfKdZ4{umfT((}SMzPg}PjWQFuoq(@K~f7Igi2K<5pdqp{i^GN z#Qi=Cl@cP0n*`A{Y5ksS@%33$;7+}im$|}QacUj(snsZb!wcY- zUFpYfZ!Z&X#EhC~D%Z;(+qAXRHJobtqS~{0TqqFi_exhnfeRnCq6@Kn#O!irmh6)tZuoxV`+pYD> zi#uU|I*OxlRl#w@Y2uneQR8tS+PFn1=WTyspzUyopR9WQIwojx%X0+3_H8oF7;sEA zR$I@xsE86ZHbb68vf=aGD^0xoTQv%}ku+~Bw4==V!`b(Z_fIEVaZ?vqc)t#rDE5U< z<1z1+C0{ZHH%l{5=$28q>Ehf&YD<08n_iJ9vmhDoim$y{bDq)u2O*qv@>9n5C7fevKkk3j`HipY(8On^OJF0?}n%okL;MQ#YjT@$bzr zTV9CwdkE~TMl|MA`bzrSp?~6|EGaD!KmT-|a!S#X4Eipn;qQqKAH?zujOz@oKOffB zpa}Ddc%*<)RCKC)56dV_97*B2n|7Grix^!Useo7274rR{Qv1j;WwC%q19lRY3alW= z7O2ej)x}ZurG>=$!t4Xd?Q5Crc!^UVtgP<-$~Mt;>C5l__s$d=4hN$=rAG~J=SPui z{!Gi_PZu{YNeUQ+to8N0w_N5@QUMN0yzWVXP$W6_G)b`sr$xRE{gz;-h4V+-`<&Q_ zk`4M{YeR+?4A%V1mhY2SNG-~u=opMF1DN0T7di5;-g#Fm=M&mogn#gvJ~b$_&!rX< zo1fRdOFmU-s*|~Md~H=lb>Q>J+{eziioadaNcsZ!Imza!DyPT3mZg1{5mxT|)OvFb z&NwMiv|Qyd$2z(;dSQpJKjB;B$5N-9`n^Ztr6vlyA+ibUP)ZOa|PF#nI~@5=Tc zo_`h0lkjd8%!-?D1WW!D;MK$PNQBb1{vP+{vbk7AW_7~xokci;TGjpgyi*#uWA*Zl ziDs|J>z6>41VI0qz5p5FMr2K!s%CZ;encm;)xMtXAlBf(_y?(te%TL=0bD(P-wY@Y z7aGv+yHfVn)>F@x=9cHq5=$aNC(rW281OOb)4xpNx$WAWR|yp+44X2Xt!Bs|P8JDN&*Jl(i$5T#J`5&6LRARC`ZJNi#59#ZS~}IYNqsD_MMBms3H|(y@>9IcA)fAxhlo*3WnIfXg z1erc1W^S{YEk65opxda_5V_^E(R;8XeG=k@+_`3cC)v z7(xQ@{UVEJw*E-?Y^x7W2C6gN{X0ry6g}iOF+i;Mhb5do)>*QfKf)|Lf$MA{ijJM$ zJZJZ*nAYtm3n6PnF4}JX#d?kP^lhn+u-TAdxr(KV&2RX+f&oOgcKsrrAg!b7EhU)q zQ(}%NEcZEzU#|aYv?>1dTi2^Zg6C)LHxI{V4GXqX5{}M*&QQPRe21*0KAlr!b)kz7 zt7-J*9zBU*%kWNbiLSj>oxxd^y=SLjc-9mC8Uqz3LT?M^>fK1xS?oS@WHIBkPQMrg z7VAwsT%jCW@$?}-J?2u%#tB$^&F;@@)D+|Mh*7eFW$~w(q6uhN#z+M(KWV6GyfZNR zKBGkn83(~1g>`*@zfzh>gG_v<${myZR4?-iulB77;I&@cPw(i*hHQ}$HNlHIWvp%l_m@E%YW|NwSH{E4cz1WYN zLaN>#)}GCFvbg0}6ZJJKdy~Gn7>7wS*Abt83eC@76|tB zZXpPZ#wxc$NAX!iVq&#kVx={?B1fGSHzC$^r1Ht8z!v6MvbcL)++WzMYrI5_vGAE| zG^ zi2FcbPVkA0Qo5AbRw}YpC9L1{extukkQ;g#{Fon2(6vpN$No%R2O;Vdmf69yRBUe# zjF^k8hU683OC=gvV^8arZUBr1Yxe7zw}m&uyp@=t7EDygc(5or``@z$G}6sqGZo)_ zX3(~h{(PM7*`-eAV0@ub`StQb0UmIO3X1Kh3F!;uAUr>Xe{yzVuieX$a(QA)fcx8; zsQG1<=F`YC_pCdaYD=V7d^pI|+F?!=k4BUG!xJ&9?w?LdJRmAJgbDSbSs#GmC>%Gr zliRL^2N*RX)5l=J%Xp=ceOA|8a@yNEQa5)8KfoGLF~lZCpBjhjHv zXFT}7k+CE|*z&Cf+*@U{uVRH|%0NMZc^M68IT!I4BBELMfS){faX@(Y;gza=4FShi zVnalWA}v?A5$fsyJ4frr5(h4a`|lb~@&0qvi$2rtF%2*PhyOW87w^=B1LFZ{o>03~ zCqXcxsuF0g#0bzCt@5G_bpALy+)APfBiSlHGE zDH}n33nf%45cS#{hD1eeVxY{=+meAn)8$1gIX7HE4Eu`4$(@E}&3+vCfccUs zsUk}gTRRmn!wwRN>s_4@*V(%{{ig)Uz7@!8!D3eAMnJ~eMILU{lk^rcNy&m9+< zz+GNY(nP#RHOcKib)j9xC;f+NNqO4MKU$SLS$#%T(VP}vQfQ!^YY5`qociet?ukFy z?TNUNnq;7VM1yIqG8%V}YJW?^g=U0wOkPmCJLDbrUJK7LaF^&Q}nJq?xw9ufVibq*g+X-`3S!*v_x^i{Nrv{KmWvCd<+HXt98Cf-s(4QyfT z$f40n^zLFY?~Ym+wS5Z$!)J~3Pax+QR9r7_etx7H-)-Ph&e2RRfjvq8+{w z$ebxU*2^RnLp?egpqu(AdW@My{TAk9*aV??_X_{+nFDn zm?lWo$@?jiN$)}3UL62SI-qF^L6q96G724y+S(Bz+oUzpSlw;P8gOH{GXCEh5eGeI zmXQ-j0E~wpcm7+5D#^4%uV>up(S9vl+g)gfFd*FM?dRC1 zhIJ-c$qR;#XJQ%get;VF^9B>=qQlc80j<3Hu0(^O#{!MHqfnohPe7lbxn6glE|8Km z;$1cQ5T{xiz7v2hyk7T^jbYq$AZ#UL9;=yoLUo@#5anzqH92k}>PY^`IIVwi0o~4C z=A0jgdb<@YVB`sT=;QoaG=_nyBw$C%Dava^FY4YUOm&7V^{1#+m|OukSwvrc-HFaB z7Mr?_7gi(GQX)l6YMi_B1p}RJHNct-;)LaH#!ylVz6!t1n0WnhVEASWNx|#XxD)8G z?q6o(4!khNy#o?8$ik*pru04a^sMtBQ9UtK;CDEp7U{X5JA9{A(R3x`XrfZ<61}WEO>q3X$ZE!QIU#q zoLeWv+rBN?QLFw<<==u27;vAXOe5d4w6Q5{nX2KSw-+{#obvBq%pG$1_|)(q#aK8x z6uri_x~#KifjoC4+_?Othba}uB|f?{x6yQ-8((Me|O_198+B= zTjk#tq!3O%vD2Nhh1c#HN`gg#bXh@xyNcKSw#7lS)h5#+qq0`5%DbF-yzkT85kSO< zQMJWIZAzj(J?e0dUuyi0=Hl*{b~!WH6p$a@v&OQqZ`vn$UjAQhGN_;X#g<9Tb(R5(F;f>P)s-}=cF0fpb;Na ze;l3*%)FUOR&3qKX3cI?W<@%)Zf-JK?W~=GWq*#)d_PO86T4mtLvhDM zynXVed#@j8W05zm9r~W188~wt+9#Xyw;e^%m#()?PaetHHT^mEXSCoSX8r*wrsAqA z6DvZSLO2F>3Amhb>9~Pa9u*6&UaFXIij#<=Ghx8p27-+Ht55QpSwv8Od>nV3?nxKO zImQRZ=(KF1K@A8NCn0L9={14=;IqV4u+_2i4#aQhmm7c{63gY~*G_FaB^qUC`|5aI zgNl^~#ZD8Vxdja`Iz6zQCmeS=AG%G^xmf;`xd_V4WH#k-I$^E4W226@ch5IY%{+5! zQ5_zT*IMOe=vO5M2w`fbKRKUm)xR%5C8ab~1*o;DQQcAztk#6??o{db25Av6Ws*I5 zWLE(#eObEVNcyHJjnY;g?>TQauN8_7fuxbE>p&P99&I)e3d>lE7VH`n; z_JYdeoPvOvP6{pAj-Tvgo*j_rcfmc(yIH zJfyrjhH3WcB-a`CiE%XL>JNsF3mzEy3sn0ueu?7`v| z%Q2dlY*{E9k-E4RLq&JvfYd;J3+Q)V7&}{*cdF{!A4aDxr^cS?*?OV)+Gy4|=4gG9 z>syZwAf)|Sgknq~^_BVE^Gal*so6HHCg?#VqultyjznYN&(1ZJ(Y8WF30Wt_a{7?Q zOp9=wTYf`^qmADp3!M_A`vCW2Cq^iP6ExxHC;sSRldsAu@7b5FA;nfVZ6W(`Z6+le zEWX7(W_le7{4j;Ivqm7pKjq_O@B0DHVUE(qsn^YYnS^?MySOoD3*tuerwV^S<~0SB zuQ7~~SNjRUzG`x4ec(nhIEpy@8-byd+g(}D2`qx(wXCtSGKrqi*=KrBjfEt4iIuJt zHF6b6k8*KmL$VXyv^pl7T5GrZff}NjRB(tk5PhSP4doB)uBZN&4pYoJv%VU1BMcY} z#EcJ}Yv5pVRAzg|1QzSKod=wp6vns&*w|2@{!91?h_Nc5m-BXSP15Ta{OrPYsJ;#_ zxd{xI*ATMT3>Km}a2)8h2t$U1Po(|D;79@x;JO`C=LGsB^-%}t#kt@5qe29PYGbDN zI)&9)QHy2DOEP~cZem#mFP*$On}<-fR8{=m)L+$(7I-9;Dn&pZ?;5>__9J%0b|F_n zd&6|F^Oksh7?frV{WuHg+C``RG*bK*@d`1YK&YWuh%Q{IhHLHtB$MO>U`xcHseL>l zd_Dm*DWW(qemX|K)P{pfbuL^DQ+t@_Vd*!vl=5i_(xXfNa5sw@krvcP4DI=U#HzM7 zW7!K>>IJF}boNOylVxgkh=s{DoCGb?QLxSIte|{O5=OvE603aVzR7PexO!jd>a7lL-b{jFES69CN$PzN|AL zi^>?VxYsE4>w2))#~}*>Q+fLx0qeB%JtrSq7I|xKpUrm@@4EV1C!bVQpclrg#$HRu zGw?P2pp3zUv3jnE+0HYrAAhAo_W&_ase%%7<6|@gOdH(>yb8F)#;nrqY}|a_#MiOsO&(+-~Va#qM@QreUyg^kS== zXj8lzl$8$_^Yd*E1++obC-uH~NyBJA=9t9En-SRn0aRR1Iy!%8xPQzXX4G;G+wDMb zG(3N-xcN92CjrJR_vo+rm4?l`%Gd0@0R;P%|1P^+UV7r~h&<%7`a5Qow8KZ~ap=*J z*k_v&kN#9^7=i9m9k*cCU9NJ#wtb)Jo{ra#BX@=u9KIipua=?v6vg&4VD)E3O}j{? z5`8va+3hOF`fEFq>X1pPv+{FQT5pVNYV?>XyELAI4tzm`%2Y+wv_2O{2+B^nzmlrZ zjMgU;On2?;Cwv#YNFi`750m@#^i}FhqTNB?pSRa)bjon>q&avcw-ZPJww2VAGmArM z{tNdoLPiAxnIP#~+6xd1=SJR+7k-dA$A`|8hF?a#@ZY-_dH;e<_?C;WtOwn3_Wr$0 z2Y3+&KexfD>TaREBWZAzacanFN3bLb%<3KElhBA9!(Z>-p8W)!6Sy2X1mAWRRTYjA z$>5!iDI|*q1?Fn72HnvLt%g#6_}K0%;N-v>>JhRaiKKGwERP%mrQo;Y01FUl`qupQ z$1$J4{wu;O6OT1% zS-3KogZBmw!6DG6Wlf*8*(k^8N-{)4>#pj>z`sNQ|32TEAj6#Nj!}P=r8c?C56q`* z)MfB8jq!nc{AImZp9T|K%6Z@=!_`MaqZCFBofmKXVYAO6S0IGh5`WHPksPts!za4W zml!U4=7xpmp>e`_o&Q{(_q7C73VJkxjR_KEk(qDdy>0ZwmLng=P$%!iHQS#(T#DRV ztJbbNUpii>QZgap5qOvB$|8rvDb*65j>WUH>mz=+TVM}r4O{ytphqw%(wbaJ4#!Wo zcb_7k&DE=OqbIT4+cROR>V2wc5#EF@;CH#wZg* zeSQ5=UCaV_@4czn!?8K)436f8x8?ksbAz%cWF68(BP%IVlx#FC=!$BIdA6m8#Bp~QLxlgVIz}=T9=c|W4U^`0Wwms-#764ee#K^~chb5?wIwiXi0YI~ zh2CTvClfXM8IVfIT09``ZX+!EE#s#Phk_QDP}-=OyBq? z<=6m}q-?nwBRUj#&L{^m2z!C>$uJ)s%Dmc0q=m&;J#)16fDJEIGQWY{AzmJwk`*}r zv#|f3&Wc#jOt0Gk-yi8U>j&*7*<&ANzb&e09-zYXB+At_p#T8dI%zI8y=d#cd=gI2d~W0EEP)M!Hf7vP zr~)Or^YL>DF;edC?EH&N*q!d&>VjGPqFN!nOu~ec+-e$Mr7Ve_i_1X*bof0z8 zwAQ>(Tg!CFxIER`Tm1Kri?-viO}{Huh$EiQ7MkZ{`3t@r%Qf3(Q=j9La0bmS+J`#O zI0W<7NUkP%UeIv)QU-=7=u-Hj> zWJJc#J~16~d%&WDWZY2rMxr8JIL3y8yip;@YATp84~OX{F__q$C)xnc?5l*v#*N1v zF&CV&;~XCcnLzCR;jF;Gtpnf3yRCoB9^$6zkQ$BF1A7$!9k%5yi`##eN?0$dKW_m3 zakOleQ`Py-V!_+dP=4G$j}q0+fKG2U&dW!agNlo$ecnmy7-Ye2j2J}b$fvrXb8L&E z+(E?Zx!--jiL{_Sr-KUu*!zCU=lNxzYk>9Tk6;Bhtr?x%p7Z74>iVWI{`dzq(GAclE~K!>wH9B5>%zW=re zRoimu4sS(+tmItvn9SN^lN3EPotD{pQD#B3!6Ua<`VZ9YV~UrddNDzKYj>AKts1+y zDEAU)= z_nGWykP^q6R{0>lBgk@=zR8DpZZrg#4+^I>HNu(+fg35b2_|K|!xj+l%U{c*_$G_> z@o0W%*tecqBlo^LYkslbSz|g?0-*ik{wrVZT7V%$ET&Hx+tQTA{-QLNso}WqplF$w zZ?7&Tq-@yYDq!K0$;1 zwid5qSt-L_P_gRGNt4jYu!jh+0cV0sZJbaHb8KG~fuacUTO8%8bT1w+lTUOb5RT$V zeDId%i%0fjv%cP;7#u4z;IcNU+uFD8=)b{oD3Y&%`*xBz*v)ybal<~+_8rhWR3E#m z^MrZ#oW$JlhMf<^LrC`tdS@Ma7{)kzz5bh~L=pp8k*w=}RqVxESfv6Ya;zuc5!Bq_ zKK$v|Y_#g!!1PQ(N_3(U*nVxR-7lwTDaDMH&5#Ai`}inXTG$}GqV9ihkyr!ue*(cL z1H59Yo!OR5=!%v?)(Sr^O#po4ohh!_6HDhud(YIYKdsE~leU3N(S zNo2s*Wq|0c=<Q>}3U$39$)a2Y8tPyjG+eRE5trtBIF}7WGKy>5 zn)Q(#mQajiT34zhEU0TT5QmBno+Ku7;0XbMMSqnMyk(Vuh}#f}xOrW*Qs1!l@2QhN zk{jW`(OprGQD@|7XpoD1MDE((uY~dnr+NT-@|y2A#ll;g!xbzfp)I~-Q>g|im*pQH z)(@h?U^9$Ix^Zdv9}f4HDAP-bY<|h;$?mURLYsGS<~gzGw|&=a&;TefsbJ-2u!#hx z%I&(48*N*!e@g#;u5BJISUrF9^&S}nfK01w2!{k?hP0zynV5@$*>`vh8>LbHN#VHU9mgt2r5)cN+S4a=v{o``R);zVFJqz#3u9oS zEE^Uve6*Vkeowj=Q9+@JV>(T}wU<`J-y#4skzV`IkAt=%7mdZ%)}eU-+${rAju;6p z4Ihi7X6Nyg`l(k`(siDjy-H}*ztTgrU!O|<JnL!a!-wkc6LFr~=1RO)7Wo zgnJzlPZNX}ig!88gze!~>%(e=ZRqB-awkp{g1+lN#7FIVFl;8AmO8wbJSeh95x z2FSqgn&DY5zERm$%)GMJea?0j)ovcj10ICFHAK+z=y%0IePXa1dDl+8D5%`=;8ouw z3$&HkLRCvUt$@Z0UOqoA~*9%;OoHSzwt$Z7)sRd%^}2p}P>bB(uT0%q4#+1n66@tI6M&J*kQ4^#VOR5{#KBb^O`C zFFz{J_Oood%FIIAc8hb-GRUzv$wHjxJt>Q0EIeC#qjd_k!}hDU+q~8qK;dNnk5^s~ zvDg0xuFt_pz(8PcWCg{;^S{yj|8RW0^@TJ-2(d{r1L+ zh2pDm=RD1Lrqv9_+L1}t)SlV|sxXQPVrFJ;hzvkMX`LCoy}|j9HGmB-?$izd4vmeC zj>O7Jl0BbueHN3%6b=juz+<2lKvnu)`%)VO8=D`ARR9eFsI!N&1^|r@z?5KJXKD;| z94?>v54xPQD>#F8dS~xHU_TZYLgFut=;HeD$jsar`d2wPIpagVgnt8x1_0Dq8r+=T z9h^IWa~vwazi=8z!SU6Lc@ywFTMz&`zow&zwSNOEA9NYm!dlAO0?33_rDcWXLUR|& z+N-^tqw6OgO;VQDR+B6sr9CQ*1)zKgBw=NB`SVE`8p3PIeh5Ti!RzVoz!UmAxt6Ae zw6>&==Tp2*hElnVS`(8dN z=BY1R&c4P++N&w}kM_C-ai5km(e*Pyz7qN z>nU%l)dj3$t0Q>lPZbfOzSSAzSMl!GeC}GneL2qO9DzA~ z!rott_EunZ^`Fb`JwK>3F-?Y8d@7fDLvB2A!V2M9>iP|iIIDP=?JXWOY22-IYnw6V@^p-#Cf6BgR z{m0gIbg&IhpncY3y5!fKqmxh8R$JHD?c55ef!W!~Fa6$@gceso!0jynU2UIEe;eC( z`hMH)Um~=D>cVpRl9K5+Kl79NKbG;ujY&8Y;Qjqmz<*sG8D9hqJ+MIF?CkyVKenYc z0sr~zPywl+$1r}$>G@jRKH`-^uzE5slV)proi=+-?6(sm49MB zH~?y~{=|NI097A*|1tbl5A0r3P2cQZ+H_SXTbdu-nK?JHqnG#zxcyMy?8kmb4Q{Uv zU*Uf>K{x#STR_*pfP3w@e}H@AIlp1o_A2@Q{p?g{eI-33T)_c<4tJK`+WXS8FYh@s+Uk22_yLSNsi-@#$*QJ;tOj!-l6CK#xTUypP= z1wO2Tc{0N%b|gpL*Wr6J#8t~$H+pm=N)Vznh013ppCqXBTF%BIu;Su`J{jtVDM__F zJlF9P<$!w*68yXM;RGt5rxs-0OXnG=6uKk%O2st~Xx>u^%WfOxEzrt2=t(aIjkvyO zFphGR^zdaWSvLODoZVx+#z39_MZP*B;`i6$Y|DEr)EJ#IXE)ukmi)DdhRnTsn70*~ z*?xVf8k!j5q>&oHhZkO!=RHRJB)?Wt?B#sI#8 z);?|Da86)gLQji{-;$%u$Uaa*(@(tbMS1CPL6+1Xwd<0_=>doeWi6==C{aWq#7_Mg+V5X7 z4F9jfd4aVu_GI%ufB3|iX?laE6pAoKpiLoAHs$NX7aSgX!pl zjz6VxDyuj(z&bpFl(T6H>@vS#SzoKgB^oD)j3R?``cIlo#h^8Bf8-*iUp_Me@)czo zgNWQop7jkP)}A3!L*GP;Rw2xC(lK=cPW?=QJ13C&6S?eBT!E z%1JvXeDCb$dRASv&OlM72$4d1-l>|*v-otIDdBXDNA+tJ;G84!9Q)3$ac1;X9@fKHDIUu{P`5ShUi-HGf0222Nqz8z0OC zfdL(%ao0{XC6Zqd*(uNg=5goWM;DC8UW~bAbM5Q3*^r?(h@FK&;^!pmW2>f zV}IdhhjZ<*nG6Ugr8gtt579ck4Os%pLOI}wMXnfvmyAn!jk^2rU_!m*AR$-cqNIDy zia-se#R-6HA*A5jw8gFF$pnF5Emb9QO5W)A5ylC0TQ8`bhttR1n{$yn-Pgmi?#tUc zKcywu-HI97`k_0CjJkZyj3ZAYHWs;_C|xn?W*aUP<`CbYbwF8n;f_CqPmNa8_oQsI z1|y`x8+qPk_MaVehg@&YvdzBVTqXIct}2u}d*lo$*|v8QDJ(gavZG`+XB@Mf)rB-+ zz-d6J!Cc16?#0D{Frk*spg92Y_1QHv3~)w)jdkGputx5IE?uzvfU<(do6S`$$i~Bu zV=5r`p0@n}MHM8BKL7OD<+GTGdAkZ`jEe-ED-8nmy0E?QbuEZsF|)9^`)wFlU6cao z0N)tI3zj&EXR8XHsmbk+Qaw^1>in#Z8Pv|*MBI94!U5e7O*(sF2(GTP{I4f)5u^hi z1cGcxB_8dIrCY^1@>fa;-V>JfU&K$v@8eEQ4MWL5m%5W(Q+81ikBo~t^Q|UOPs=a< zNz}1llPwqJ4*SgL6o!-Imr}fIBeG)J>U~^jUtRKQIE8LOV9Kgf-vI2ro(h*l-sP&` zkoyDOnN0L&^e1n6g0^QsCq|8u1)!;(njIgZZp#*uyscQ&te8_~ zJ67C$_?fz0QRL9fDEh(Hr_zc%`#W0is(HalDU-K}9cGs@2O?NJLUB_0kKF#AI^>D_mZqE_%W9!YQm?#BF* z?r-;^z<6Cn@v$qVD?XB8CfBZW(d8m`x#Yv5V*#pfP6>0gKCjP z{R25gD93|q|0Z5nTb!r|kOuylr5$ukp~)KygNp>s<=+>ttA>INMG29VzNbiM<`F(>#!2>w&4&Ewx?4Bs`$FiYW*G6rT1(>>^lEK zZj4TfJ$os?NVEm#b1#JBFEV^9t|#tNH=jdyX@S3a1AL?uw-vSM*HB5#*hX~=PW^nJ zuOA^St!jg%1&W>m^-`RggzP}eXE4o4vG&pH8wcI#r0Ug6R4MPLmeA1%?CL53IBpnY zX+_5@lTYE;x~y??iKdz#JTy=p*w^Y&++;?F+XonO8G1KVyq8~ZBu%g#2xkBuzuT z+rEjTQjF+BTk>{SZ-N^{CCsFU!LfS^{ajl*LZvAZIHv03fqn=C&*Js72 zozcKfIW#eWlw7;hr>Ihm5T6}I0Y1&DeQ%c0cs^o>$J2(cD%d@RSt^8u>N+Gkc@ghB z+0)o;r1i5T)#1nL%%sb&{TaZuUE}j1?|sg z)m(n9Y^KO6iCUF-c_a+uT{gAYD{#L**@OoL&wt-gKC9oDXEvJox`|^G3k1{OfbxeG zi5s8ba^oJ&iVJS?Pa-1co3akA96VQ0yM#Q>_w_LcXq3m-hJ)?$BoY@#HDVwiX9%*h zXYnZ!Z4pq~0`G~R%RU@W8v?p>*V-pc*CP;iH zf17xuUD>KFPmFRb|FUK)-vK-RTWt(i6hz$*SOIG(IMg)5Rt%5vz(N5v^Rqnzlx`za z%m`T~df12*I`St9x#PAdip()o(W7?dKa%sS6C9zt18um1Je+G{vo?iBRMrrE@O*4Te)7mPHoeQ&Bm$$ue5b6g4w26-WxOL9yV`LGvq3k>)YM5#>be z-v?lPQ8Zj9xsb8z`)oR(Q*OK5{n`T1fm@18>5k^$;;c_J(*2cXGQ7_@jow(|V8m)D zImF1aaG?Sm61_J{oZTh8gsh8nP5KY)EQ;3aPG^=QoI^hJ!Qgni=Tu;g;T0WX!9((u z)|kbICYAd;$j6pk&+T56kxrQ^$>Gs6N9DA!a%rK=DGylRoYTi1!>GwL1tB03@RuGd>q z%enz)xV$CKS(&V8P?#NUvT&`S2)!zU-_S|P&Be`08=vyLe;K4tzx?FLf566-Xm(y} zvj2CNR}BP+*O^EE-`78dYpZgem=>Lq%=(nJ=nmRppJyZrkXY4^P#96swaRWVVN<=?L+4~%R<6pwO-T}|KJ;0 z+Sqcn=IThj@oO-Y?oQVESHHCDlv_49jeAQxYwk9^3scVyvL?*PE4@tPr*vh54gNk#c+}ee{vGr@FR|q zI>OqZ%0nV)d4%lkMnASuX3{tt2+)p(P{KJlbn=`ry1oq@A3o!bjd-gy@E#X24_^PL zE?6W{C&sIaG{f-$F~73Sw+!Dn@7B#=taCh%eUJtWlOl*IsGEBhr2(7#a>+cp6maEDgdh)mcx52xHydX}|7A zQ=Wb(-jua$!cm)raJu!(h_D~=q*RAsIZj)Nj638jN=HcGv!x9c!nbX;Z@;F2BFn8* z58Gv>a6I0OgYPKGNl`alCR>+PJgN8b=csp%UD8t?^F3}|PzHtq?HZ?<&=X@Cub604 zO0ZGc!G}V!J4dNMzTOOuUibq?xIi7IAWFU9kZ7LO!Cj3djv75Y&3 zSiOSgy720H3%aC$XTyBPdQ;3O=r1gNjuKLi+oJ)KGB{BHXd@X3+6|#(uzW#H z3pY+9wn(NZK!5(-Bi9LWiu zzqDX}h;r%T&*QQTCT(1IhI{iw;%_*AGjkQ~%8An_ka{VO07}sUh7Mp7H8xVFOkTqs zo24+lc3YqJ`gKe^FM|L{QR{$ZWIqw1-hX<8i2q1%Qah%Kw%ILS6q3s<*e8dTclW!Y zf5Fe03M!&JNgC6IN+mJdcIc}cdoiLCW?2i>zl<3~8&5_UyS-oW@kJtjXT!oitLPvn z^Cfm*Mn$(4%$z&00-WRJ`^@;aP2}O*+|(E4gUvnjU;R``TSl~7K~Fm`1isQadBLd% zG?*N8nOoefGv3pF50hR57vQ5Z@YC*9iPVreKFp_K<`8r*S?KmEw4+)LZG36dzx>V7 znEzCQLoLMhTSviuCT(WY(L=x~vf2(4w7tXM$0&%R4BGWH`O$sw6w_sKpa0pFB<_Ul2BX%x-3}-K}f!&Emq~s~@l%pDrxoQ@v5*@n%g7 zy$tde1yy_UJ;4dQY}$FrgPVa}QRs^lD(``)!l znk;$wUTn>XL!!!W7YgfuzoT5+pDvWNAB8=fI-7&7>^F-L?Bi?_{DJ5bzp<;!EnR}{ZZA6p_0^Txu=z2H02nO_4$ zU*5)Nm|Y}@P7aruQ1KoDJdP2^zVlQlfMeu>i|r_x6!t>ZzfM=d8Vf$8HEudIt|q0T ze8+m(^(Qch*GtXfKjo!HqAwo+{HKc}94NP|*|~_r9*$vp_zA5aX%}<)nQ8fH^exKz zUKij9$Ho$QoJY7Xeq~fMK82a;+nVR8I&Bs~uTA;S2|m7{RJES3p%>#hvd?6V@n+jU zo4AkTuXEAfIyrjA@Q1xXTAuq=O3*F)GG#(M`$aKy2w^r)ypJ4cu=3ctxgK`33c|s` z`ck@O)?DKhMw%?Ov)@!LMyzi>Qj8vLyHubg_J#6%TMwogRi1RK{Q!qpIGN7$@z?tY=o-_bEOQl9|tv{xL)7?9It}I59 z^HPrxfl#s3pcZA^u4TWnkiD2@;H2|I1QRGj^h1vEJc|-@V!%aYds{^|Rnxr?ZLwHT zOG4>N6sId#(w8qzx+1I^bS~W-sfNvxFw!TZZ35E(YOXkWVkY|nq zqyjf8FMA^=tD;4Cg0U%s{&6N_6Sx%F1=EirHiX7%$G7FjCJ)=&@K#Vwv@FV88(Ps3 z@~p`};9}32E3>~OWuz9Dhh8|4L(@3#$k@rwecx6TJPJfBw6`pmMMpu4qTfhdW3$06 zn?G{c(ia>iYMRQJ&tP0f(v%fTj1bxVV@fa>wroUV32}mEMhNPS16o^aKcsSuN_UgX zCIuYx-hS15rsIjb)3rhKPqC;}auFetC5eN}4tk|81*WqgGUNG~1IB7SU1b)FNI_Bf zTtN8#o^d?c^60inpnf*T->F~=6UHV<+<6LQIu6`zM)3pDXs>-1&+QvYgwERN3t_C%Lb4+@jpzAFsV*qaG+O1QIp>V5_Qq_z zAM)(!O@wcl6r&fnlld6`m?~xJB?6?Mt1pwf8!&eRo;GJbPKjnN-C1?~ZY06ZEkX(R z;ox}o^{Ov?W@F*J*8w{&9rc2T*#8ST&+`g?%hzkD;sf!|=iQwngM858rGaS(z8Jy} zG03sqz`n6ENtZq!gT_P+OgrukSJQ=?TiQd%;{WXVK8OlXZ!mi>)MFHoTTvE95`ss4 z7$?u+CRk!lpzT^~5Scl3A`$I(!Q$d3zZ+wjzVIQEl7=^J!s0OA7I5E4jO<&-gZE_f zE`&}i0(61{ppq7)@xCX9UbR@pv85y}ps#%*8&d2;G<5qY^pv=mY+lB5?7DAp*s_cp z(0k)CTh{qdL@rnjmpsm$zS%jDzl(rRZL4Ei0_%&Oe=VxJ8Jft-V`wmlwrXL!S@*$# zIIo^}8(M2QDuS75RE@i4WaP$3Zg&my_Vo`f*vcH$fB(b+RtnIZrA%GJNV1OE7NO}# z2j1|oJ3~%h%J!SoX88%^`LyZdSoC^xZq8L1htMO=w8gx)+uNkQ&i&UvB=lGd@%J1~HupOw*WNIJQ+ z4s?6D%+oA0ORVyIo%+o~;meJGS3%;*mdR>0wi#xXDc#XEF(*465rp(gP2uV^A66t( zgR|3$%d%SXeu_ zK=pRd0f&9T4$sX6r9OJ@`zC)LC@avT=;m&?)&RXaJgu8hRLo4`lxy2fyp1Ax+TYn3K`~RBL&*(SnE+tE*nNT zcxKmdmaQvGD}1J1NbuoWPGi&fF=%cF4;y`Dm`I${v058;aG)&_NjYVho3yxUBt(cm zx3J%L+&hP&;F^0@K3OTG_wI*Aq8&bpPYZR7$wQz&GnALs&anU4!^=Ut&N*fq1<&)3gnB8$YH}rL|Jc%q7%SaL#SN>dygJM3KJpiM2BuRd2nhIoqtn*VWXd}?YvvorNiDp&Eh&Z9yXgK zyOU|m%82x4&s`_4tzA0f=GwwXT2SmXP;Es{JcxhKSES@xPnqZqk|Cyubi5Tq4HCLc z@VrjdOAs@MJkdal$_b(d3vnS$gr$eiNRm@_E{gqkU*zezFM9Yzrr0r_%6v?k6gPLQ zG%gnL>4Mx*G*7L=&L-sUWxqvS?+-w0RDKO=DsTC#lBH^puYrCOZui=GP z{j6a&apaEHz;)Ih>(WS2Bq=l^0t7zD+HKmEMNbp1AMMP2RTum$*C0~-Z6ucIDA6F- zJePQ4{R@p6JX|tDOus*@7jA6|Q4q3S7Y2q*b|^-p58M2kq>Ccu zo)f8!UR5I$JsdmMftiq!@>`yHy&q8V&vQ;|W>QGZUvf?7Q0I$l=_-q(+d_{-Gt+Ho zfQ-|~$)ngKUyST);?ebZwcaiR4%yr6S($HwuC7ZP)xr_PU#oII}=0v0n@ z?6=xMGmr-BhRbRuNGwL~@-2 zUW!h^*+F~b$#22rY>Wwte&F@0nWQ2E?vRG`qik1t1E889O{UWQ-8ZL);iGzsnHW%--%B(6y|HOGo)usc%5#GLY?F++u{swytV`zpc;8hxERKd*{NZ-YW@ z8ES110!*I@ysT=ReWcbIe8-qh(!0chz`YHWhM6|8VtQZCL7BJVmeHr!^qjXt-rzUh zSA!S346+f&+5r1Cb*Mrr-v}k!rfgBVXe-^7h4V5u`)+piB)1JJPm*9^@o>SJ@>dHv zk|G^ZRmw7G9B%8#`yjrhmpM4}2;=XMYK)$@!id&)b=2m%1;@}qjl;IVL5{z4RUVfZ2?E~V! z$cnTXjISqtX6R(sBC(WDEb-OizPl^WmhsQfhP_)F;;)RXJtzMwEZj#Ul8#}fzRXTt zrTb{z>nb8M5<;YbJA({bC&89Z8B+8z^xqTH=us2)h?31j-ZDaF&%cz^SSm_od}T|C z105I%VwZWbvb{4G2ydpN|Hr{^u4KmU^NMrTR=3xe3}VAx4O~~zGU)u z?CK%P()+_Ri3Ru=JW|Tg5nvt&3FX@`^udtmkQdPh}8bzf$BmvO(z{Ej~ab?e;OjiPEpR{Ym!@vSYvU<~i zg@$+2^fOy3xr(7jhTv5LgsGXI?F3|!to0bR&Y*$GhLWdlXoDe zvnjjbZPvFu@9NipH}s}K_#@W4S0?1?qAp41g?7DIF^Se;(69^QXJZl@0m*3Ymt8{=eEi8j4=u!T3;i^^ zg!`|VHwqwuAMVX=JU(*xAbq?^ymD?=sNCOzlT_d-v3-otj=X4I<2<=S#h+1nJ2pwi z+}!>9=I>ZUcjX!w>kWlE-23UZ0HVz=ZKyZD7mdaHbP@K-bhmIykTDsjGum99Ly!fm z>QvFdEJ$$`wRIX;v^;&ya7p;{0Hk&}Vmdf)k_}3x`3x+z^fF=?XRKi{Vih#E9lS^FB8LGrGe}E+*D4v40$G+Mlzr?OO*=n z`XyYZ(au3N!7;kvpff535zjX~4T>eD`;L4HS*5 zZ5NC#Td+3M1_C8jk|r8l7ZGaNlq;P#;u!aCCalRX<4s#Lx*7obSc;o2P>mjT2!fn# zs23kDGP9m_M^0HvVXpEcNs|HDR}MXUh9wk14>rmg8OMu~@6rWde*IX=Dx5GPUvT$A z(x3}CljDgqm4RC>$!2lN!djRQ&JlpWVqn`k^-tlSd#-N9=YjYJI(9r zy7Fy`+RFPU{%r^O47`bzDNGNzwqXo!KTD&O{ChdM|K49X`gC}9VvQL6d+Eo z#Okpuh8*2c`Y*RQA9c{-3U2gVKmItDa^?FkhRUj9JNc*59^b!F=ap!BZXGKLGI`-( z)uocfufAoz7uWjowl=Kql77u-@u~`BsUpEKG~-~Mkhoo+ho{C4|JZ)U_%=iUsk$+l zNL?kAfoF%$j?7Q6d63rhYHtNryJnpSnjAybrw96qGf-ZZG8)U_Uk-wvG?YJh#0GLn zX!GSC`|GgRXwpByWNEPHke1Qbs`L$L9d}`EX`4DuQ~73RD#9uTf5Qt><3jc^dth{T z_RCA`X~73+_(gkX<%%nRAemaHlVt@1wu>BHa#shP<;5F^ELi*O(E~WC3|acyNr@I* zEiT6aK4mPsFB|GuHF|QFR6a=}&Ua+J)cgkpsHU% zhsmuBVJ2MWxcgu~5obyU9(bGx>!0XHyp1p7Gp#pOOurJY6ZGcdE8m?NSjbwsk;*VD zgIa3T={9Pmuo;9HMh^QFojbw-t1Q$6O+SdOF21?Z9H;Csro;;rS2nd@+gCb4Arsz& z1V;!VDTw)_X0c^f%(Ji)u;?mgnf>EeLLfR7SFXaitwEF{n95GOnk05?z7QTC%dbS0 zS15JXE=g!-y0_4akAwuJ!Tehy$dS1z{8rVx69v`Xz*`TqWz}%WOfjk4xh9SO{)J|B zV&Ui|7?)q@=K>c_W^*v&U#yjg9Anp$B&D+a;b#hu5fp1I58QMKiM@?}L#m@k5R--# z`G+NC`X)FrY)m~2CJhn5JRr1FT>KzdWiFvr?Ztb9W1k`6hAM4+aqT{T*k8;r(7&J} z6q`MA+u2|Y83qV)6iNVn2^r0LBLD?5F-h72dV3eo<^&9{`tP891+6o*hN4J`QzF{A zjGcqZ&qKOTzf_qdlKj7}uXyj#jrb*UrQo?kT@O&~IjO9K19$^r)L3|YFG4A3j$ zUbY^agS-TstAB2}EO{JCgpT=0jFYpmqyjj6g;`o(7=McVM!S?Zg6E@2%vi2+8UjIaI-Yv=hb`Cp%Mv9=up=z%38DRKM2?4q{LzDjhqp?!?`@L#yJe`{m;yv< z139R9ydaXa`j5;#6t&<&it8+i`Dr91q1+|;Y3K-cyP{hjy8#|M1!-CI8xELF2j~kh zx@{kZaICbh-_FSJKVUSow>9xsRE`6C+=m-apgqt$TAuk@l7A$lFyIo!5B0*pPlf2g z({V$J=z`CKZWt}}F{W1$OEx6pH!b=T?eULA1X8XYIh}gf+2+%$;r&m zm8_L^+$q+i^6g-SaHFqBOZR{ZXyrkd&;w9d9|-k1ottP~Q*2~h_27}qMshsQ#s8n0 zaW1~e8v^I7QJVDzzqQ9DvFj87>W9_?DV=L=M`by?6^8j9eu7dI9#50eR-~lS;)y!8 z*^V|SG(CNQv^&__(9QT1iyK?*;I80{pN+L*F=0cTc8uR2g1?>_D^J{$GmQ5RO6?@@ z28gQK)B@+xchp!a?2(l7xFM(RXg=@ys`3Dj5R-CHmmDBcq3-EU{2`mpZ>n-trVw}X z(GO}flk4c_)f-(T)CQW-ho3&|0}biF%V16*_E9Xg`8Fh1+GhwBGxQn%ym076SY5D( z53w$&c_5w7X(^yN*DbOw{zLWRQFq1Dp32iRO&bs>cr?!@`;;>C1K*84ml8lxdY1HV zXgjz$RaPpqz||7=e)mv$%f@^*vPpH-0}du(HDm@1C<1M}&|}@vZ5p*~-@)2pC)Qmz zw}VVxMN;dd#}K7hpwxViEc?sPGoW-=2ys^28GDE3AH_kL7cVlCGeL@y;^WSUIyanY zB;$$^i67i=F+s^Y3^8vyWNtJU)5gvtRgaU{K@HR?+#~(KkuEVc3`W^9_a;b-f}SRGlVn8(^Y^dBUSc^onCD$9>O zt8sINROE+*j{4tcf~FPPnv%Afd5bpqAQp+nK_sW+x1<;0Mc2LSvwzz)a^qYQ2SqE( zM88XIp!R{Y=74u=^t6czXcVYl^y4sC*eGZt%KXJ778UbX3zmMxIHpvEo%Q{%bGXA} ze8`~C8q)1nfNvO2V9E|;rkWN@$B!xFdKzuDvjhElt)ykhPd#fd~P+4m0c^ayuT}$>`Km}9r+fFDc1mvrsJ|7?Eb4f^KhAK zpRk-_KQtG|NJd%@z)dA{=`#~I0+o4iR|DZ2^d9W4A7->2gJc>o7~$5T0C`URl5hrM zi<^a?gS@{Op?Ut7hrIdS9^Mt(wGOqoNuMBFB^%*+=m%{R`NzcH{)@s1H-KQ1NwKcF zC~S~wyQXX-KM_ddtK`Q4ug!bYqzotDcbc(Dju1I&wSz9r9*SG(81vuNx?#Rx2zM$l zQr{@#LoT|`uyqu8#HekPddeLkDluGb98VYOz!b8!WCK^BbvsTjkj)$EBbgc+xJs;7bbO|2!Rsi`-m`0J>D1~QrY#gUR-QJMpO&f^%&I7a z{7N7m+9L`R!pnxRod2xbw313`iAwSyf2*H$>ZT_43G#UWQjL$27E+%OjuYZFpN-c2 zte&B~KDEwX?i?LMEsYkOP&S47Gq}hN5Qvswv9V684br-MpSn6@3WiB7;P)( zt4uLc1>XtAF#9{Y42Uodk7$MGXbbBcas`q^>4tfld~v*a5V!()EZBxxGsB3~3Rp0= zpC^Hf8fs}|m0nt{N3hmFD+SXEv`*v|D9+Dt934&G(_^`_!Hh?V!X5-v2t#R{HQmmA zFM~1WZHdco#;5_m&U5zW0HBO*ufeu6lM^$}2`4eRF};FO-&%Gf%PXUf4)@NXITjW# z8Av150mZYGV`;VvyaJ`QY_ps?)qxu0yXHOHmou9yW3u?`Es)O>r^+oIulXIZtUZ`y z%pD(fR2(bu=Kn$2ImCzpbXmA<+qP}nwr$(SYr9|Dwr$(CZM*-snam_Jo2gwTl~huT zTe&#jsqVj{+r0{Ynlm&?5SwX7x)v+MQ&Qp3fk{{atMb%QWuiegmg`2--2wMDOn}3~ zUW))z6~HrnGuqv4ES>cKun=f$t=Fa{Smg zZ6FJwv?b{;3>;xu1MO3ry51T$iV^)HZ2!X`Ku;Wc_XpPfzL@WEk z&YZ?LhQAW_fl4SIypsp!fF_#^$4+m?8+GQft&llzxy%wL=2cs?kZ~&_Ii=2ui>@@d zn2bzmGlJ}^hRf{HR`04^C+iribc_g0q|QYiw4V8$HY~F8r3w4C`@G9mH7Msx@VG*W z+s=Dm354fh+LDXRcu6aZD1aajRj#x8T(imjJ6UJJesX=l_BF6v2Xrz1=;h7LSE+Ef ze`|e+sEWQfD^*^%rg=K_YcfG9-3x{T z441N=$RS5rLqrz|ecOBw2nXmCMwSxk5S|N2I+O$7rP?oxCSR4fo+T5{iKGqNJpj=b zt^gPUR3&q7kT0$^vpHg$g&s=ef+hECN+)!LK|g9A;RV%0N1eYTJ` zQT(2oxv?mMjLjjdtVAPO&4kF-J5TUn)G?xhu0IDlp?b#t1Mx8TA}I9^_dvsbgFk13 zkhdypGueI6YV9Wv_orB9{-^jB89p0K$;{beNNedyDikcT znLV(e{Y^ySxnl5xUJp^Jq0FM;*bcDw?fo~-U*Ns}&b9*e7g@}u*T9vhZn9MNjnT`W zn|=?(?*KX^6|%NtxFxoCa(d+EHEyt#|Gq+FdoHXV(@#cy=0h+aLiVSC_5ON9#F*Do)+sJ9-;kS5=MU~ zH&k-}f@hCHR9$50_NsrGf2MEtQ`rQl9r&p_s@Zk5235s+dibqLI2zfP2tTvlJdS3l zk|%^?O!e9rR2d~Zp;#mxPZG-(xQ?uteOn{;SLboQThGC zX})*-O(m%&6FB3L$MP|)KDdpy-TP9>KpA>0O+K;47nFVRkvi(nB`D2ma}6|^HEx6! z!N@;X0P=nR#g7GxccH6X&mM=cc7k(ioBWgW-UqmC+^dCbFl5}1MXdyeWB4>2;93>Z zjRQ(o_IMLsv)%p`AbC6)?JbJjruK!I%E9T*3>W!Ih4jT?{zN`-D%U*a4nKBpx0Ua3R>d02NWyNR50CA(EVcHl;LjsdD*6{ju z#LuBz$vYu2Tg@VQz}ZO4b7hd^X-<$cJ=*Dih^#)8Lqq1PTK>fo5VH?aY7P+FBT8t7 zQqillZKcHcRP8}|P&_n-mLBHz%0WyNa{)vHz&L>xzWK>Smnh}I-+mPJPD9mjO59Qo@srlExtV$11%9C^)lddhIQ+OWjaY+9=gMPa4E zu{*0(j4+TRxL(d8H?iFj8>7D(z_EGToL?GX%|kbMDEpnYk$+D(oSVT#wHI&egZ-po z^UC#3-Uj;{1a_!*GGM)T1E`| zfV&RS;^J;IcD8cn7Ks^%0CL)eiI4&QUPoi3h}O-Jw;D{`E!u!}xx#V&DuDS49JjX$S6S;2V;g z6U(=TwQ*p736ZuHozumhlBX^JZ0r-FzXm5l?ELF6A61#wwH_WQuKU9?qbAY~6AfGB zpxK-zOJ>783y&izxgZw%KozDw$+wPcF=hczD!FLLGAP9R&hlr6E}0fIqj!lb z+}uUCT_$zQwj4#HgKI5;?4fo^nKfC3hzeT0^F!S|g|w)WUs?Ra4yM!ZCqivzAAz#G z2gRtwAY`_&udX)86ws9LfokkDu+tF<2f!azY9%a(M;CDjxuv%VOuZ&H_ek(v}PGh+c%A;s5Jud(csBscN=AfVN8td3cZ z>~hRfJ&6dr*y&RaoO*%2=Wjn{GRZ65Q;Bv#kbv$DQvurxu!S6&jGz9Dii-qIS5s=d z;+zBi&x;mOZ9%^r469mIh)IBgYZb%$_$k5M{BzCEeLzqGif~T4-yv_+Q`?)-P12Iu zSQ{MfC;CJ+p^EfWLX~CPLuF9*`yo}(7!Y=EpT-&uk{g~+u_Vv*7FQ`;!6$jUv1$9P zxlJ*o_F>uE{FgLI@YUZd(kQ(6I{Iq$L7cnOCs9hJAC7fGximzYXi4+#G~$c#E7SL4 z@5zFl(dARjuEDQn{Da_LUW(=p#4ci8td9~${q&2xxcBR2l z`?sGlw&c}kl0YJe{4x1|dQu{;maS#&#R1NH(RlPhYZbAxPXgkqAa1e`Hg`s8XKFRB z_)NZ9Z=Uv9^vbrTztS}5L7riVE&SbA!}x#2so5zPDG_^O`3*afPNT#rQ74}!DuTM{ z+;)q!u3Qu@+-s*sXZB@f97KL!-l#@nqTF$y8ThAO6I4lqtaiP_)^n1?#QXa_;`z$j z`(7#E)@L023K8(zx=oE?=&5S)lsw|?+#`lMij^Sj@C~dU()VDxoDeBXs=&4%MK;LOR|EazAHy{M zevMr(SJA66%4bs9d-wIswW%RaN+kx>HfWg z^kQ<}IpmXR47+=+%wA-uYj(<{W!o_G&hXM2a5Ac6Id)DE_q15*PI;#}opunBIf~>c z<1pbSd9M-+6_{MR1n<=|K{xW6!|FpPs_pN+8Fszq)bzJ>uPJ<>UV%KV z4NSjIBvFhN$7zr zklv6Dk)I8n*T;fX%8Mpko+LzmcOXym7^&fY&7bdNU*itx8@A8#TRb*p=l3bj!Wf<;T>V$DX%J7X~L zi&8Ip^btJJsVEwGN)ufHY4CB)m(boy*og*ti6q&cS)t6|c&|m9NDG&42<*y6DJr;L zbf`F?vn1yxX{wPzOndH1o+z0KGc%UgyGc%DFk(#8L#M!>L{R|0L7@CXo1WgFr8aL zNku*cc-G#NmEB3Ay`y+3AH}=*IsjWyaHA!$?1yf*Ha4GW&6K{L8x*#Kr@xT$WgKEp zq-|G<9QqwtQlL|D@n*dH*+T11cb74GZRIeeJOs zw5|rixuUML9&dSl#$N@&e-{0-z07S>RqOcrtMo!KEW8|N6x;?IsJM}igMVI9JAJa; z3RDqQe{Vnn4TqJ*yk(uex}sFUM^Xjqr8*o@*ijgOG~firZik~Bb4A8t*N{OT+KMfj zfx#k*aDxI&RjJ5`z96B`f>433pB}#;FqB7+JAzVbO?3BRsNjlnkBxn?0};b=L0?rm zbhSV8vFw>y!eyP|uawY>IFY_>3Z`Tn#R~VPjR?TOE3eohWqe_SRwuSPtApujOkxY{ zP!AfCQq$YX&_!x7+X->5yzQF_eH1&G-dOTVNR@Ccliy1{$yQ6IezTh!=0usOR@=_H zp$3jht%f*%#_uN6P-*^9(ATMcHIZHqVJZ4E7F$?0$cmpP8Ca2-&aiC2-nI4~s|Woc zBc(WbG;;S{@DP@a4agXjGK6l8k&i_S0`G+<6-xL&9HqQU1pfGVVFth&G_J2}P zm>F0ZIsP9M6zq)^R+wQZ6nA(n3cKOR&Q9ri0@0w(e@i&<;O6E=Ny?G-=A-zO=k+Cv zd#88TAjITfN$I-zRZdJuvLa80-U5aRBr>oH_beSVtqqW=VFGOBWlH8rh(OvH02&w> z85@YSxDI!&uOG*R)@Tpl2+V;a4e%%ir_av~0F8`{4n!(|V-Cv#Tn!5tMi;O_02~-q z9h-nTU}KLy58$712s=w1cxB*9$;pZUR$Uas*vRtC*3#6zJB*sw$8Lh3H#8$a5ll3V zz|0HU2>`IQaR5p%4X^;*5e!-eaGBr=fN)-VU@;_s36KJy6@W^LXi75Rfz(3<)C3F6 zUf)D48yi9A?;%lDRRNV8I09m_G9oCz@)^KE#ROIFZzVu=|Cj7JfD@I$_brdX;On_W0J{<^g``~3nM$*e{uYDB$h3@V&$YIRzNc0ml-q);b%-H5DtJ0U=9tyg^|hlEBmaL^PSf0 zhZc;zZ*d#U1ek%bt_j>LBNL!s9^&Q&OimymIGcEG@jExtpBTgpE}*_W0oY@xe-mWC z_AGIQi~wMD*N7qMx9rFMzWjHifMxI75~iWW1r!5V76Ic}0B%n)@8{P%{9B%mQCwP@ z6PTLdx%cC}R}4(;B(>(3=@TE?bb8`#eX7-4T38eFvg$PLK z$2tOV16tckdtQXqcZUjeZ@NDx1E-A8(moYv5F@A3=jKv0u?E zgKWexq^_smgu43gR1MAVh>0l>y1_Sm1Rd}@c@PKtAFL67i~woocVNvvOxdYlj=G;P zIe#LC#-PJYjUUFhYdEK-PjP{|sB?aTw1Rc~fxVZs_Kh^a>R&^^)bwBApiYx}cnG?U z2YiI7*$a3Ru*P@fNZczc*d4Inx!_6g?{PRcuy1KtGy6wzSU59dfF3NGKr(->p^-0t zrA~iVxUN@>{wQ;}5AnwI{^p-TUIGE;y8ia}-YNnhoB^>2Y3Ko9 z-h=o^+Ch9=kY@0!LJ5x#JLtqtmlC2vcW1FJiv>_8HcEmW(cjrVNS0Coj7vCNdXau; zp<60|8EE!=S;)Pyd74&H)S2#)UWx|LP;q2bkK|qarRzLW-VhXXCP>LH)tq8W+CkbB zf>FTbMLDs$?20o<_Ym!rAX=ofeb0eD)ZrN2`eSJxanleIxhq%4vJ7{A=M{&EYdA;T z_GPHXPY>a(0<}`oiENC`R1p6g*x+V{JX;dDw`3$&M;%}KFCZTTxSrwiu)*<|?h9Ih z_ENM%7>472)rw?DSp7XRuhG?5(PBe#Kd5F29~noCWs!bJ>&~HHz(lMdm?)~XpS~y? z)o0xyf|TO*vlVmu$~&ZWx6-Y*A>%&KWEDeI>&ByY@3;vda+>z+p@*3AL&k#e*(dC` zfWB!x-t{}$V>ww;t|Jn$nfq933fx-=uIdJrki6Z--`JJ%EqGg}GwBS+IY+xb(%*YK zwwCzSJAzcbFz2y%@)g!-{ww^6Qen+00||tPkkE>WH7+b-KqHPRsS*t)FJ)dFix_jF zk-MjIkX0s&dNJv|Dg}7A`B9px6~w?x-npL?c`)KLKT#4tB|pJ`3%gLbo6pPp_EtK` zL4$nbr_8V?Y(Flz$Y5rq-pSKp2NR@368dEn9@!SHVIH>GkC0kf^aPLqTgFFx!)1ow zt&72y)IlByA($La%o>-)zFC$ng><#B2H9kmP`&OXD6a4s8ex1^Rk)1OvRh#r7=?O* z_G*Uz=TKpfYZT>J7Wgs8^@|s@acLVs@1hF=hfJriF&XQ^V0_xLn;N&>q^Y#wO~QI7 zQbViYQ|iv0Rs4eJG~7>pjipm#-(u$$Cr3AL)@laRI9aa^{o6Lq}f?^IrBKC^MStDF?BVD7d-EO?pkUhoHRI*|0s66zWq=XobSehm?x_v08Q3 z&CIm5LCK0VQlZAxV%o;2nZJu4n^j_JIK+?kZP?9JB6E*H(Z+}2X!s7AHI_pH0+WBL$eKEu>8RLq7=s_fu3gIe*4$ zO^ymVPOgi9>;*o!87phQr?5{K&F@ep$iqMo4wD2)c$*AG_8)FTNf>*__ z4%;So13ks;0vwcC-U*4oqt(pAmjCIzTL_!%y(6|*g`@(O5A;1uE?}N4y3GHP*Qq?z zOB0^doCa0dl8w~1=v?W(k!#kh7w%pU+GLlDgW6BGrb|}?E8J&+_PAxJ) zLz3PYKKeO_>k2e%#BB{Ry)AJxMimzxz1_Hej_F8mMN0P(*AYiX`U~N9BipGX$F1-o zp06DVxAMm#V_NEUitL)^fN!`>bg0zGLQ34$C>O2y`bV>6uc%(!wU^l;DWX(prVv$g zT{ZX~YAWbHn74?_*hh%n{5QL*7Td2jOK-KxJeMVqX4pf(Q3j%b=~-{eX$z324)buh zb_RP`+qdQ|X!_i}v|@W!cl0yq(sQ9Hj`~MNwN%sbbb8ULIF;1wsQF^nh9~}Ym<1;j zeEMB9G#yF{;f*$8y_s&Qe$Hy_8<8+8Ik$IN_$+#C3=q8L8a?!CGp^*57YIJ~cN*!h zMDv#eoa^3u{Fuk+c74w`O6}%lLlO@#^}LBf?DKi`WHMf4$@+c{N}cu|oU*rHN{nsG zny%PyIY7Uj1cJhyS6=CLn_-6$8NXeE{wXi^FL@qkux8V|WBiM;NDm= zU-qv!bmy1kzl7!sP0kSOzqd)3vs~lJM;9LEW81w#i-{g=`0hD`4-&o z!*L3@y{KFZb;6>KNb=SEZh2+1y1KbZUUO7wXWI#S@O1I{QJ-HhbJZvf5GLp()r|6A z^=gBoedD^8$xxFTe5&HAJ1aeG2<#J^=o6`V`l6YB#c&F>ZMTeBIb;aP?`3V3;>C4@ z)`+2O*O}1Q_bQ}&v+QTx*sT<5!ECe8_D^c-`d#_N2M4UE*2y}PuLv4}8s{p~Q~D!l z0!cly!XEAo3_EHehEG7j3m{*ce})=bYl-TGJ;_j5)U_(Y720WvLl?BRV+x3U3@zYa z!K%>VFtu>AjTpjTZMy_5v_I%*pb4WVy;i!S}fe z<_U`f8=^H@cYVmI*SZWtR~{7a5(9lCs3Qk&Gklxf!4pLTXR^*d`T-+gjJ$Fpm0YJhnE`JZzUf8v6cay^*+z2QR|uCuBoSc0b{VH zo~kwNN-Su?NlVOfF8M3Gn~NrW@yoJ6;^vz0&_92eRC7SoDk->rD~-aL1*PqqRxmOW z&f_3H=EDaq2`AsdjH6tC%gUy*E$oS6&R06QRvtt~P@wWL7 z+4*?J2wsD*V{MCcGHg#9aM2Yyv@1Um>UI!bK)=L-vjum_5|N3#Dr3U-=?gI`Hh9vm3Zb8{aZZMoGIg#`qH z)yh45;&glTn#q!(oD%mSA2;(MD*9%rP^FqVH<}cWB?n_ZvI$A^RsA0Lyyt+=Wf z2M)pW{~5$UQlIhl)}GN~SGj>735HeT==xglfLf^6#q4DCm!fJzP(kLJ`+R5ui8mgg z?2hkqDT4pK7qp{_Y@qM6b&6x&7l|1h&e$7#xG4z|xe(m2+?07_+b1-MiXvX)jJSh%Te{mg;B z1HHX+g^o8QhNZ*mEhV`}CD>Hp{wiC7T;L5+B@j42m2n)kyiGCJjxc>zVyrEm%#iaW zU-VK%^H<%IShw-oewo)?r=YpV`PUwiKXAUSi3zEl=x?)5s?nrdqZ5Zj8943hM_KMy z&Qf4*F00#gD_MBCzME)Et$B5*mb&b$Yp5;yIAabTf2?OXHQY>^93Ke+VarJ;#J#0!<(bTB0zH6 z)%fhu_1Dzilo&fF?^v>AC>=js*Xxthh`I%)mOAXfeVMLk+aNS6aoktyK7|Eo;H*(f z;E#jBB{PO?ii&c7LStiU)%2f!H>9$NyEFR`C?n+)HAnV{EuRdQ+>Qpxb!U;$^(h{d z*pu%r9F5~O*Lh7Yy^ks8ZBFmsDD#9o(axBOrc=>wqIQhhco*$2W&qxFguw(_J-!4N z(_W~!!OZ5xEKTC5F z7``YcNH4D|kIQYz%cyXBj-ax{ z{N>V_PVcvre8n_!1H_DjF4b#oie{%y{dAgU?QOxLRbN#}HKTs!=I~5Gq9qL?6B!9? zR;K;3=nW@Ae|RpckQpmah9jUari3Ds}sE5LFOMl=NrqiDb!*7Z}qk1 z^qp@em@ifFNw;+X<-7?abCi(FOE^cl{Xcr%`)>CUl*c&*qYSxc3W+P}FeIzk_(Rt1 zIr`<~wC`o!3lmD5HjlD%Z2c6C){X0Jm+tJ(@>Skv1R;>!aX3|r=(qNTV}LS3ZD5)p zlw+H+F)tPD$M{_O6&%O}TTbDPHoKo5=~c0k8_cUsPTtd5lsWUr5B0M^ z1WpHE<&$_et5g?Q#Fl_!?438?&ggidTQ(0HGhV8u_$wD%D709hW84lD=kGFyC@%9p z*I*bIBZ!q{p$#^V2b16d@k*J~ANmX>d09tg-0WrXK0;x0jj>)kWelm&Y(DALJOn9K;p@$qWrl;ualjE>OVd!I>fBW8EBYN z3)9G%WO;-~^3o=!=49$&!wKK9>pS=gCJ&rKjoi05`g;AJn;6lo!yBFz&A!APA-0^K z#2GppDYd@w9J+h4h(-xU3V~>4ENtUJrqpXJ#5wxRf9FiryRVQdZt4dIiE5zl7RRB8 ziIV$JZQF&Nh7MXq3ww$ne1d6N<1tsBd6(AH@gg7dUy?k06$izNeN@*wyREaPEf&wo z$+3bB-rzlGK=59@PQ{MkL(P6xlAK8~8i`?-pRu7jEmP29BJ3AN!g#n|xzOBIs|!< zfq3`^Pu4%ap1+tRk9;(GKK~;&QAhd44exk*#mQ!?FlH z&qZ++RPs?%+p_bWy>(h&ucVpK7h3aEeuCGG7G+M&i<6yFU^M<+ru-~%c0eor46*m%=>)4DZ#I!@VK9+QI9zH zleWvbC3i@Z>2gRXJ;V7KA0)61k2%6}J@@FPuM0qdzex@Rh@a)*+ z+kx)62EN&Sz6fy9Y&eyzpAXVJXkzE_kh;;`tfZ+5?p$HE6)uMzF**n(M?G#4QXZ`u zPdl^Oq-NWU^0+VXsipf4(;mD{Xzp!z2zi8!*f1x_XIJqCQZ$A$2e!n(=$c1m!h2Pe z?)9;FPtwd<>eJL>fsm;4v$LI9pcjms-Rx69SlY8%GVe0qE+fkW>|E$xssyy)OI0XN z(gPN>wleSl@H_|i+{I2n5le8rk5~+G+an0>+6 z42^tqRF|riI{sS++V?q#d=$8(DvJ`f3>xDJ6+Z;1>2PuP43auN*kU;hJa?u4qoaUJu|R-oVE@A4umNnrO~=U z&_f-HovH1OsxcjmT}&oPdoE!zQ(O6Vc(K&*QHDK>X}-sw4D5wX!e)0})a1^id_Q2v z9xb^y?^;A)#NymT1@E{OCVe#`&FY8V<6BN|dC~fMc!Y|9Cd(N0wQ-6q zS%uh!+6;4vxn7QyeZY5{PuN61%tG2@<)N}!vz2yWiz?LzO2n#8A$cIzKTY@^>oN*_ z#@DpbLd3nRu|!?~&Brd>hpZxktg=dw0ewmSbIvOQnRj5IBF_-6K^TPYd%Hm8wme;? zprOR$q3l!?EeXwWaF4m+OS>H=5dz0?=1wIGDeCz_GxEoEqE7D~q3T-G7$S%Qeu=*6 z18$Pk+|Lw%GyAf?v^^XSkDH_+iDUp#=-9-K%rt#4t3+cL$H%SbBEKF3tD(EJ?d44a z4&=9agcu4(?SY;Rg^z}42oo@CaSI>%!s5AxA6sF_Epb=n9254KG?4=tuB_gppdQmh z8{sUDI+uKDdYYBlhck5|44RsO)58y=;V zmk5Npj%YccuzZbP44Hg_yf=4zeIf?p46 zBLJ@AbkUI_5%Z}c>}p48tzP#;KGGL`(=X_Av5d`eJ+pU)A&OH@E%q#*m9z|!Bq)$f zSK0J|3!1vqfGw1lj*kUZg<(sGRFHY&gmK(Q9bWpaW*TAKn8ZBleXP1-!C|U>bQ9P; zP>>`%du~;QRimjdolSuYf7e%f58EBbKIBsaoZc7-m$ZaZGW;Jwr(J1xBX6ZTxA9Aj_SlEl?qJIi-z25VazLiBfmP@ zoV>j+mTxc`z453q_85jx$A+FP03n7mf2hsQtaC`wlvB)r#{;FgC7*XIG05L`{s_V> zZ7bDx=hC1lByTI7yuVQVn`9=i7!%uP*9oc7?H`=!nCK+0;Dbci`%Tq>xuAF-e3cq9Ek6IoLMsZxUs$U2#S%2;^Bu<>yH9hLfD<`#UOknITZmHvc%C4#-Y?6`_ztlt%Q>9h4YDMqch<0S z>#_62lry{ih{xQ^_alBiW-M~WW2+}LN8OaohNMC>1B*wYoy16&y51c^v|6cjZpcpN z$4GRl%x6C17t^zIqMo3|h^0|F?uDG~+zdaetYq4r_v-m(s5*!lk`ZEgfN;6WD?ILE zzc6COlmM)>xT08~!t7T%VcWqvT*Tf}SU)rxXYS(BHVtJ}rVw3P(;~2fd;!F{dyZCP z^$-U`Xp^PDLpYq%xYgqFfH`8_^aSB9s%|Hz;4zGCOsIUhnnz}t1tzZON z+|T%Ztl=bTmWv*^vqM52&_}NdNkvpfQX_U^Pa%dMQc5nSlZ%o(h-G=V#`iuckD$lY z>l;Vh$$uVPXz6_eV~w-M8p?J|00+m%CfyOO14zJrjEagX-uYIDd{ z41DF4OI9xtj6SXsqyIrlUN0I?W7fpxH@>By)pDA{=zNPtS1a2j!+(+RyvpgDe5$ea zbQs0Q81du~>F~R$;`*KJtG=5aAA(3ZMJbpuEl|G5#$*Bb1tfDtMn{%DRaER5(?dwOeRu`XKv1L%cX4y*` zt7({tPLI!cR)@s%!|{ZGsOv}wH$>G3ffqQ67=YU$uxd*p@RG+elA!=$z2dZI!R5e0 z((AFTHsEaC@p&Z8j(>qG!lZ312f%T%^*s-WrP4A0qd=Vtp?l9fRNnQBUHtW)uRa|i z1cf7g?&~3C*sG-K>S6Fx!oR239e< zbhabyVU_I|E~;0bILQH}eac@>78n=9mcCssSJ3lpDX1=<1HuNYYUPZ}eTLQO?mCtZFJoxRnh{V?_ zqyN*`2FJE$cj{}xUS80vbpdC^8S)B7fx%3@7GL7!$%uPu)KbMy0LM;PijU`3UW<4t ztlJD~T*OlVjX3m%CBe#;^yykL9>AjrqitCk#zdn>#wq8p&dN=(z3cE$WGh!JrG)M~ zCB~wG#5Z&Ou*o;xPi7)^z-Bq$v!cl_f?CRZK!{GIcMd8FVqBITpZNx&z(SGjIxF+f zAMl0Gx?}o{?k;<`$J_&3bHZ!Xz=IwlhwH-4K9L?sT!77lQ0ZGV91@S@%%uVBE>kN} zR7}PerWu@!W(USgkpx>m(yEytSGe4>ln1S4DQ?-Fd>wh$4tToa_Nc+y&vk_rv_V-% zd;*bO92b|?Gc=FRF8<9FCVr*IWVe$z3d}f%H^xv50n{u~?*i~cwK(C*3+9n8MrtW1 zAquP4BaWSYDvCqWBvN{td}zrBb(qtj&EcfFXsUrI&m`X1T6MoowJ~P4#Tz+yigSz( z9er<&!T7K=#s@LPSn20*@u7%}v_mofzyKR_ zFY7oHVF0;)?lHHqGfKk%CX_(`=|P%mG)F7aO(S7RPg@Ke<%@LA{@$rrDoJD{0tm4oz&Bp*C0Ma4ZbH`n9y`|e=~K*6^L$6d zEmIXk71X$QOLB%u&scR*1Zhp*p4k!tLWSTAf7 z#`8S+o(rFi2;GLuAD3ISAW&ZBf!S>+E>J#+mKa~j(cbX+!-?a>_sEuKo^5_sLCS86 zBc55lbpQzolzgd*UZ|gma8C^QzJ-A;xjF6w7*tjDw4A}50tOB$VTK%1$472g|9kl& zO@}+>3sY*=<~t)Q+mjzWl!TAEL8|t0Dwn`863os%Fa9PE3rvq!%ki%)2<#V@1j9+U zWJ|=nXr}L=!-Mi+^!mp8wp$_)Eci0CLBEf>wPP%+YV^_Ac-WjeoG~gbQu+JQ{t2UJ zztgIA`c3-%!P`v9AzdXV-qL6Y2x`K&T$dy4kUrugjXBqO*sP?JG5JG(5yS)dz_SNM zlkE6+M}mxTL3>6Nu=8(qu7{}$E+W~3tTxF~+`fn{RU7EIp+c-)OI!(5l35-o;h))t|{>G@5qLC>7Lt_ymjH69#THEWKD4m?4LsYAHuh>5igGKQlQ)&OE(v#}ysW<4} z_s>T5+d5rIK4#&_88(-WwZGHFSyc9GNG`LulZp5;ax`C~ zN_&ef9uWA=yd7~VY~xDprD4TKK>yfeIwil$ewxeDzx+wNg7~MhtLc1dm~|Oidi|vH zTi$g)CU?1*R(5A7&bzcitQFS&jsKC%Nzs^W@4s4|%=`m$%wpjb>&4nZ|DtZ>c&J$4 zVZq6TjRN{v^)XU5n*v#>5s}3{l&kH=m{AifI%HqKMH=ymY`%ETo9wsH>7T8lFz(Xc z*s?fLLxfs`a7gxqAJH_c&BRLG{V>qP+Qsa-<<+DZpB4zTAEbfytk7KDBNmEi(A6j0 z(CM*oJ|TGYua>~SySaiclTx@a@7M52Sm!o(OEV=uW>$A#-M7xQG_)V8(cQT}!rs=( z+R6UchH4`ts73R0EHo4Vv<_-27nxoI&05`n>8oC+&Koyv|4EB!;W1j?_^mu+<10lx z(uph1gNXeV8;!@%s|*mbW%34?IO{DqBN6Ema7TRQVDy3Aq(-Ekrtz?-c%OScmUMPf z#JY82BKy|rRivnlR`aTZk6jx-BsDI<_A`1=>z`}Fz)=>R_q7N0)2V-l5~1xI;gGD4 zpmf~c?y0#8`qz}!Y)i*aKMdtMhc4#pw`|TU0~bi_^V9U+pUR#YdQ%y8+R$>l@2pww zZ~MGgUpo5d=4eh+jFd#6+d%XV%|BUp*Y6?Rg7Cu_O`Ae2GD^FHQ&lpW6#zHrqpe_% zp+~-7pSVo-6Ag~-t>go3Z--|C&rXqd++q&SuM(#2>bKM86cPtG-afRBL#*Sc8ald7 z)5#4oL^&0l=Qf z`}wyK3j)Jb`r|0QX$!b%uRbo)ifeBhG8_}?)y9klK~i@y(lj?0Y|N-0t1Gy&`Y#6o z?rp&Z1{m= zL!AK!ZX~U-3hd|R-&SA#33=D3G@i;l)eA{8LBBh=|~OOVr6DIqNs_d74uk*iTW7BwTJ3$BP?^_(vGc6Yds}L zxv(-YHHn@T)cAqhoBzccUX$DhNbk%bPOWD zPOvK=WFgDQ{i&k4>mb~A(YBH_{=hP0^hrlm3E^qzA5GL&S|)-b?$FB_G?BV|t%u|e z%L(yO@U5o>vUI<0p2V#M=>}nb`^ZxMP;LyTq<)1YGiXG>eUpu3TLPykcIK0KPhBp` zo5gdxW$vif#9RZoV4-Q%8!m!qkDuvOLhQ*B?h$EcIxYmET<(*fTX$5d5`q0AImRoS zenIZ~nGJxUzFKRjWO34%YIag`a2I%N64kGheCo?|HICz#zF|il=R-njDMcws^J7Mh z`<*0#)kF32f#-R>LVZRtWSZiqn?++)h;JKTc&C^Ovw!YFN#^0hF;Tes78&$CTtLh! zB8JF@Q8|6bmnE@H^1YFu3GFPt!WFwpQNDAgNfG6JyG=}yCFLq6T|`VP=otlNQ|YdH zj=d~}jFr|jqbbznV!G~)>+I7nYTYU*-_A;f+US7j7Dm6t&{%I}iQljTGd^1dH?t8k zuI~BW6JSHn3!G9x08jc&1iUsmn&)J=d?twLr!`lag_Dmp-`dV|Dsv~Lf|O^xpXB*_ zZH1y%#eKB^iZ+j)jW({TOe+*r7q&(S|Jl}LXzENkGM-8_ha;vJ@MqbVEbQa2U~g^@ ze{iu5+^A|GMQ=5jm>WlA^sMs=3=aKyrBG5{qYJ!{q`_94yC(hZfrbp=7 zV$T$ito=VlhdP+oITC54-Sf5tiMWiI;_fI1n*uayLId-;ZLt)DDZ7uxr=APB*na>; zK)Szi1V^O48E=~qJgKXAdG}xzo!fkkXJPp>sxfLU)lu*6ob0U|8}cD>wJ3jPYvK~>l|A;ugQU8_J8_HiXx+#@n9ee$W)#QafMbjz9 z0+K(b8Knn;Oil%VNs)zo>VxWAt_52AcM5pI=DdD@r%};|Fr}aK>EV)ie4Xe$;E>b( zfUT@aX0{dIne(ro1o?bmwKQ}u>$CSBWQ>-#Xk27hJYk(LH=V=S%UI)huCir*?gN}E z>2%d|xRoXf(vJF++Qa1zyIf(4MyGjodDUObWz9b9X(;u!d9=6cUGNV_KX;6|-@VWG zxulh3D>l1}!^!^+qvhkR-ZtA%j`Pk#?NiUp$$MH@2WTXBzs5S`N|z#Rq0l17^{vcn zvHZ?U3Yi#to?I_sF@I?cgK`#YXxkw3_gf99TJkCgC`>9UqPO-_Vp23MV4AmliS99jsZ$;K+K%vnCCC@42dzcQ zkfHq$;`ODepFsUqZ*q@3{D(!=SuE*I$&MUd`Mu=~qi(d-F=-Xl~4Ta@)#kh*cKEi9P4y5QnB*=6v z27X+z`G^<2Eur%;=Z2Glm#ISeW|B?SG>VF7X2vv6>8}czy zn;Bn5E-%081J}o=J?8P1jb%&+i3ny!VNLAdVS4wocOYMyE%5<~?71h`u+`8ZmS#7I zRCyJi=e9u8$L+kR%CBy^?m3$n$=D@LZJX3KH6;~L1_dbPr87dgL;@-ApE0_|H%_G*4P zcyD~&n$0uUF6giye~dgsxxNj$5ln@OfUs~_i-di*^MZ(6uCrAzF4zsvD1R}eOa$U_=5sU~G%r6U*cdr15UAK~M_@GUhqU4x!mHD!oZUrW%6W)_0-QE6DR zMz-x%qmEC87y0R&f>BrW1lGwz47c^n)5uUhW>?rq+B}@M6=c|wSRlJ<$`j^_u{2*1 zu#K6{Ihv^f2^vkDdE-+=1XB3-I%M37VPNI} zQ0k_mSnJAhzYehq!7}>7hj=0Gd=%?t-_F>)YN~kKOMInT6db#P^{Sa#l9Ts^P%J@U zP)oY(E~n_sVu`C;o#g5Xw7toSQPAC91ua}SKjsOb<_Y4qZb;JJCd6i?WvtWuGCa^j zQw004+%!&fb3fat<8*zYX9zg@MBtCrY1G@29+0*6+3=m0D4uYx4ij3)tixNFEd%rs zL&S|y&lp>=FH1dDB<#|lBBA={?%YzC z0vs7*tg+CUdi7F5Yn&mAiN4)^dGm5hXTsOoUC%cI<>2#=4#bTC;6xzZ87Ubf<#PEuk%)S&V zW$U7sJz0APOp#s=T$Y8fL9DS+?AJ}l%O{wuf;sp=Uyilfmx49hsk!{gog)93{B^W& z^$Y7oP^{bY)j=h;WG~wn_uCaUggwP$m*C#7#MUx60?hMMzLdRT0tj>4F<%KwUATS? zjZM382h6s%Rl%stEbu)5`Dn&F+>a5s_oubAHTCZ(+Hp!mKP$T>xF=JMh0w8DR@OBx z(0CWZKF=g2WJe$LSoze%`d?9}lG$uPWmN2i(_;WdVaZbua0*vf@gh873#DId8`Yf| zzBk~PG1Di!)sl9GUWZBmTHR_RRhDT%sOXla6gaz&d=F!3d+A)o&M{`t8OYM2EHWw_ z$2%>pr}!%Be98hHoBt3|v&cll6C(&?rm`rNa3%iL)^Xz*Fqu|Rt${n?Zkx(vUADUU zwV64H#{bQ3rhPZGpoGJBj?S-d9eEe1F5USSU;S;VLW zQ2DLJT0wg?L#A6ljs?PP0<*mo^SE29IP~#m`*z9;6hQ=59t6 z{N!S!kl28+s{x9zqTp82MB4lLEi~a=1++LCx#R%;A%KU;sWAzuWBgS2JxV3Z_Sz#n zvPCobh7-K7Yu(0(~;(SGI6jEGAou0v!kMX)6rwOnh*o2|J z9I$z_U9Rt*G8g5jjd_zVbT*1d0MK=Tq<)BkVO+d<3Hd%Q{?o7=T>>3O8aG&=(0PUL zG@0iyT6opDL`WzgH+74b==6RDDWtd`>tdnO&8Cyef5`rJIsH)sMZ|ZsYv(v1e;MZU z9nujH4!g|&O5Ps3K8|js`{+w0VQWZ}Pc0B3s?zKJabLYgZ)re# z2zZZhmzZ@?BSdYPpJ&6(*hG0CG=oEpdLr1AQnqv73Qv7W9Pgh%$-6Vve( zbBpubw_|kjX{bYR zxl7wBkZ_tAoL;lD{$R&Pn>1ZT{7z`WOg>jntS?o2>HS?hza7HJHIZ*K0ino=8Nv3& zIn0rN#;9U4d$bG-!trgQmo7AcM^A$o?6Z2I$@lqU0xQ!zsp+FLCE;vr=R4uo1*ff1 zyGHig4Q`zb$mvJQV^M0FU#E|L5g79-I%Pkw7;dFrWyeXJmY8R{IQhA_B&lzb(KJ45 z9L=Lqdvdxg!QYA2DHH$lUPXF2<@{mU60Tq9*axl4s0-Oul9^2`V}iR#P8Q>Y;e$nG zEURWRxQKbrGBD=vG=M>jSlYL}=i_ba-1{DXDd=WzUv-%HSOQw1xiBHtR#-?5rIbxR zi(H~GBEsZ-S48PYR7IF*n=%osmncbTf$?YI@=;lY-KzE`{Pn|U^;OfHX zD~dsc4{yU(d-h7L`NO}Ah>*%nz&9B@AE(&iE)PDUWzkYJcwowlAL{?i2)E}AZxCch zxs8HlokiHTjD#MLPc8Za321`yHdN{S3AI8vwPbr;7Ju8SzEm{i_Yon~hR^a1Oka=b zwr$}^$^9Pt9{qp5-P3kUtDZwIFW)pUMEI(%s_Q0{%EIvN_)Jzx`Bh52b4AL#^-XOo zKU8wI@=GnIi5m<(D;;kg4}6)JZD_Fw&KLT0Hp-^YypPNY+|BF8iw#mLbPyNXzDk^> zcr1%S#4;b&CNm61DJd6uqW~{3DrRJ#j~~c}IZk>qhLC6o#~dGGopVM;{krWofhzLq z2Mwh1Z;?s!elAJOkl=|CLLTXl`p?Qy3KdHs>Ui&EyN-8T@v2MF=I?VlG_;F9gj-$T ztFtZLonZLP>S#xL1Qj9O91iftJYaPN;AYtTfc{wgnle9W+v7P7feRv&6=nWx zH$OH+?%9)bzwQyKE|eS;ipgZJ=G&x&byX1ftM%PZuAg{1Gy1m=8eO+W!!RdY?{1oA zgBND^;0d6Jh@ClBjP`9+2_Yw_WRi^FjN=8BMevLe5wnK`Kx?*XD@`z}M zEuWzZez~~x4^Qa#2pE`*epJPq>UrN192(MnkNda{M3 z_Js*of{y8j3MD5?x$5%~>X)pbYByFR=R`xlzO&j!C(Eqc(ptZ8`F0QpZLo!nzoX!L z)Us5F2WIseP;x#091f$p`y909-|nuqydJ}#zFfukK;Z}@rtVtXdZT-ZCxzwPwA^pA zj|j}m!l?QY57m*}qW0>p$7F%c1I2|N;QKl+8bNgCBN3Fw7LNT;sYwBU6rHxo?82?& z@@Uu7?UY1!*A4nU-i0cJi7+~hKvXP#6U^(H zEUo>dc%q2+8yJ;pg#-XRvDD`b<BV+c__dvqcP9w*mwt&bkaB!iM~{tLS*2DX85B@SNGi1npLVEj^$<0F zRC%(rRgIFt&qRzrsH{j}Csn$620k@IxUe%{&ez`&@{!A0F%QW<=EFYe378{`$%>is z49UdMA!-qf!epeCKZr6_QPxww)RX?SkYf0rSC7!nZQ%5@xeYtXnhguI@{_VAJgQ>m z&3daXnm)YI=1r=7kBGq4>?9!6g1aDfFD?pI2StctFq`X|Iz=yzjBHjwND{pq^5 z$}ADB`g5tD+I6ljEk88PC1PW_>RL@mb?TdPIG$J#OMC}%haM3gfF|%6maQMA#`aw* z6BQP2&0)inE)`jmJ8(uPLzFJ)owp6RmWtX0wW>JxCGel7!dLq##*;WH;)4lM7+*a7 z=*YL>g&!c+{=WcWHJ-}TM`kOkiT1p7B3P@;xRau|QN&0a&l3@Art7;G1H0Yy9`a#r}npVU?2Wl~80=vVY1W4eWA#eWM!KmZABOjYAm=;O}EoyZ+I%ZqLUmh=qxnK(% zR@=7uGDvW)+>~RB_is5YDg=+N@VRw+nORb%BJ?l^vBR1p9XKw4P49$kFWDJT^^2RE zE8FknG*av;!k-QQ`IAGM5sHS z|Gtni5IC@R?t1Jj;xJMGcq8ay967b!B^dyjkF~b@n&Ds!QlkqVGJ(mw;c#cTby9%H zGk>CkyF)%`Jl;XiovEz>1yW-e|1uKd#(!A{J9*k(Z2d6H6nFo_e7pC%?VxQx1G ztJ~e!+agB{!bS}ReCW(^s!O;{tz3sPq$p4gQSB$q(4GFCelE{P)JZYvX;A1sL5otJ zm#EZmFSR~mDE)*7YP0TtZB3rGd1ZaGoBR6rbv=72oIiM0*)E(f)BR zvjU!I50O{3pKChpA9r@%#91=mt#m6fhr?Y80~p`(B}7T-!j0wz27L+1<>N8|Xd$k`sR{$`d8gj`xHf$X)V zBg-ijsU@*xU&lmcRH`E-yxfxcjQ^jO_c`75kG25!VGP_{d*eRjT zHUWa|bIX$Se~XD5h9e7AjPotTjdNt@sQYVpvcrVwbm2;c$72m8SsSc>MZhVIZR5_p z@XS$uj5>aXs=OaOz`wGup8LPfcNI;JdHVKj^(ol-BRe8_(gF77+yjqLAR-)vDLq%K zUNrDtsdeVc5RPtX{4Jqjk2s10xw_mo5>}%UtTgka@@~2=UfvBm2{=*nBS8Fur%}X`XsNA z{3Q$ICw((ydEpqrPuiKz2y=+`py}zo5VN_9NYdtZmq(WOKe_Y>^+^wD0C^rmS_FZH z0vn4OP2XCJ3YnHniy5}OoS*fsE1D7Ru7DKu2=8#ETDEO@3S~nm1bi-Wd1nV*NEn`F2z+2NPbxlPdB!t%+eQR|Q(~cSqtk_2IqL8H zi`C>E*VDMc+vHtPgZtmMQKYJe-xuoG>kvzw@OPZNaNn)9Fg(!MIrwxKpf;_{fj`!7-TVS&7X6}Fu;;TSG84`h@HW8; zm@Pe8Cd##4A49qI$YtEmzaUl(cPteC(<*HcmSRG8N)DHdw>-(js6MB!d@#H9go~O( z++YcMNl{F#zTnRY(=>S?@v0jTK(ox}9>ld7^>$gZ1Dq9|;idX_L)JtX@H5t<$IBBS z$}4MUb5{N2cspQhN!xBajz(@_)m{b=9gkKLA<8i}wSUsiUV=8IZG3B9&Kr&a6)P100N^{b*^ z>QU*$W9jo$#fV|){xW7qLAO!3p|*RVgx_^_!(-+uIEwQUy&xVgn(W1FE?e?P3j@s+<&~ zQh@6IAIk$Mxx^+n1HEmbHEQfYIXot{mq@qjIOFvnN{s2s=ee~*J4HZNU39Te`~3z- zLP^`LGMLY1MP>y%bC~^~JjIShbSqn4W}xvEL8mQjgelhq7&nyQGF{6P+y``0sw^Sk zU3Pu2-xe}la4+LsqRr9!fS7urVq58B0K5ubRqP@jiHlt7)N2I9v^DJ<=}4!1facw& zUUe9U@ikscVrMwT069qrXq_*Jq~U!>4g!?JI#qZiN0LV*LFQl)I+<3zm42eU?Eng$ zIm+t00eRji+`84`BwX^-y%PZ3sNzrSc(6QROHifx<-79oYB&+a_|#;F*5wy>Bjee` zRZrH%*y_t?l94NsIRS{+n!{jOuaz;u`wi`QA@L6XS(nRq8snn+TL8r%N}X2?e_#(m zn<}#QEJA);+zdK%>&Kanh_kaJ;N5;VK*9eU*JA^>NL{)03Y?e_H<{_$Sz=V~RKjrM z^d^O04AzzVHhK6hDK18nOPrck`_)&MV&x#+?y28fFwo<9#|HcQz65GyrV}eN=qb?- zsc%i(x2G7BWbh6~0;q5xFCbC&IT8ITR4mw7OG z%d2)y;>sd1ZAqVC=f=QI>A@E?TuxDRjXGRavIV&Z3>uP04m#KI&6G}&t-T)qRa?G} zpVxL;DM5B0oA1PR!<~OBGmY0y<*XY2ltYoe@8C-xD=;K_d(o|Oe%$@u`1#((Aa@T? zb_-l~m^Oi+=N5-SwMI9Arj^p=G@BY^vxigC)sv;D2qNdEXlSSdu;fwL@WQ?-0{d59 z;;9SqL^GuZ;SVUK7$T@&QdlTR#4_z$ClN-J(&Di1UIrWw8hb+XJp5 zqUgrlT$0i&By_H%o;GLhn(lEeDI~ydmsgZrC1rO5x70W&Tau$CF{Lm{_AEtLPE>3a zCE&DR2tW!urPkNJVt3x~L(Wb!mLS&a6;Zx)TgncRYW+um9pfZK11m( z0M|wd0rI~On_+15Tq>`hIa$_}0b=t0=gLV|n_mz2=%fKUd$;r4{Lt$W(R*}(0VuAK%uC~H&<*j+E470y;az;j2H z(<0f=5`?v9|G`r`k_Vm>j+%v$FdgKOJ^o?tf{&F5m5+mENJSFHDR~$z$JE+fdD%2-h{jz~f?Lvgt09 z4zvofjO$S0{v)*>N-QHj-h-yYAfqtZ9yb@zDIRaAXhs=DWKs!?@BTeX)Y?OLWUGY~ zyUcu85&7Y3YY$enx|c&{r!zy`p2MOyc#3bd&V=o1hr3|2t3BSAKZz?Fpr0%FDAUiH zyeKE7br;zWG`lyF?Cp|0s}VNhI`67LH<7C zt47TTyc2k9(4%@<&#Xg5do|p444A{}z#YZry?P6z=-z7CIPSJda&*aF^-DP)r>z

      O;%_7Tp+o$p-53Dapm0UjgBQ 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 literal 103726 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 Dd3k.sh| +registers a custom manager without touching the repository. A minimal +plugin declares \texttt{pm\_\_detect} and \texttt{pm\_\_run}; +optional callbacks expose whether the manager needs sudo, can run in +parallel, is gated by \texttt{-\/-dev} and which icon to print. Plugins +honour \texttt{-\/-only}, \texttt{-\/-except}, \texttt{-\/-parallel}, +\texttt{-\/-dev}, the detection cache, hooks and the summary. A +copy-pasteable template is provided in +\texttt{share/plugins/example.sh}. Linux and macOS only. + +%------------------------------------------------------- +\section{Integration} +%------------------------------------------------------- + +\subsection{JSON output} +\texttt{up -\/-json} emits a single-line JSON object on stdout, with the +logo, info line and summary box suppressed. The same schema is what +\texttt{history.jsonl} stores one line at a time: + +\begin{lstlisting}[language=bashplus] +{"ts":"2026-04-14T07:24:31Z","duration":42,"freed_kb":15360, + "errors":0,"reboot":0, + "managers":[{"name":"apt","result":"ok"},{"name":"flatpak","result":"ok"}]} +\end{lstlisting} + +\subsection{Prometheus metrics} +\texttt{up -\/-metrics FILE} reads the most recent entry of +\texttt{history.jsonl} and writes a Prometheus textfile-collector +snapshot. Exposed gauges include +\texttt{emerger\_last\_run\_timestamp\_seconds}, +\texttt{emerger\_last\_run\_duration\_seconds}, +\texttt{emerger\_last\_run\_freed\_bytes}, +\texttt{emerger\_last\_run\_errors}, +\texttt{emerger\_reboot\_required} and one +\texttt{emerger\_manager\_ok\{manager="..."\}} per manager of the last +run. The flag does not trigger an update run; invoke it from a +\texttt{post.d} hook or from the scheduler after \texttt{up} completes. + +\subsection{Download-only and offline} +\texttt{-\/-download-only} (alias \texttt{-\/-offline}) refreshes the +package indexes and downloads the pending upgrade set but does not +install it. Supported natively on \texttt{pacman} (\texttt{-Syuw}), +\texttt{apt} (\texttt{-\/-download-only}), \texttt{dnf} +(\texttt{-\/-downloadonly}) and \texttt{zypper} +(\texttt{update -\/-download-only}). This is the safe prefetch option +for metered connections and for pre-staging maintenance windows. + +\subsection{Manager filtering} +\texttt{-\/-only LIST} restricts the run to the listed comma-separated +managers; \texttt{-\/-except LIST} excludes them. Filtering is applied +after detection and after \texttt{-\/-dev} / \texttt{-\/-firmware} +gating, and \texttt{-\/-except} always wins over \texttt{-\/-only} when +both mention the same name. + +%------------------------------------------------------- +\section{Auto-update (unattended)} +%------------------------------------------------------- +\texttt{up -au} installs a weekly unattended run. On Linux the preferred +backend is a systemd user timer +(\verb|~/.config/systemd/user/emerger.{service,timer}|); cron is used as +fallback. On macOS cron is the default and \texttt{launchd} can be used +manually. On Windows a \texttt{Register-ScheduledTask -TaskName eMerger} +is created. The trigger fires weekly on Sunday at 10:00 with a +$\pm$ one-hour randomised delay, and always uses +\texttt{-y -q -nl -ni}. Pair with \texttt{QUIET\_HOURS} to keep the +machine quiet at night. + +%------------------------------------------------------- +\section{Files and paths} +%------------------------------------------------------- + +\paragraph{Linux and macOS} +\begin{center} +\begin{tabular}{@{}p{0.45\linewidth} p{0.45\linewidth}@{}} +\toprule +\textbf{Path} & \textbf{Purpose} \\ +\midrule +\verb|~/.config/emerger/config.sh| & User defaults \\ +\verb|~/.config/emerger/profiles.d/| & User profiles \\ +\verb|~/.config/emerger/hooks/{pre,post}.d/| & Hook scripts \\ +\verb|~/.config/emerger/ignore.list| & Ignore list (pacman native) \\ +\verb|~/.config/emerger/managers.d/*.sh| & User-defined manager plugins \\ +\verb|~/.cache/emerger/detected| & Detection cache \\ +\verb|~/.local/state/emerger/emerger.log| & Log (rotated at 2000 lines) \\ +\verb|~/.local/state/emerger/history.jsonl| & One JSON record per run \\ +\verb|~/.local/state/emerger/resume| & Resume cursor \\ +\verb|/tmp/emerger.lock| & Global lock (\texttt{flock}) \\ +\bottomrule +\end{tabular} +\end{center} + +\paragraph{Windows} +\begin{center} +\begin{tabular}{@{}p{0.45\linewidth} p{0.45\linewidth}@{}} +\toprule +\textbf{Path} & \textbf{Purpose} \\ +\midrule +\verb|%APPDATA%\emerger\config.ps1| & User defaults \\ +\verb|%APPDATA%\emerger\profiles.d\| & User profiles \\ +\verb|%APPDATA%\emerger\hooks\{pre,post}.d\| & Hook scripts \\ +\verb|%LOCALAPPDATA%\emerger\cache\| & Detection cache \\ +\verb|%LOCALAPPDATA%\emerger\state\emerger.log| & Log \\ +\verb|%LOCALAPPDATA%\emerger\state\history.jsonl| & Run history \\ +\bottomrule +\end{tabular} +\end{center} + +%------------------------------------------------------- +\section{Source tree} +%------------------------------------------------------- +The Bash and PowerShell implementations share the same layering: +argument parsing, UI, logging, locking and per-manager dispatch are each +isolated in their own file. + +\paragraph{Bash (\texttt{src/lib/})} +\texttt{args.sh}, \texttt{changelog.sh}, \texttt{clean.sh}, +\texttt{diff.sh}, \texttt{disk.sh}, \texttt{doctor.sh}, +\texttt{estimate.sh}, \texttt{hooks.sh}, \texttt{ignore.sh}, +\texttt{lock.sh}, \texttt{log.sh}, \texttt{metrics.sh}, +\texttt{mirrors.sh}, \texttt{notify.sh}, \texttt{packages.sh}, +\texttt{plugins.sh}, \texttt{profiles.sh}, \texttt{progress.sh}, +\texttt{reboot.sh}, \texttt{report.sh}, \texttt{resume.sh}, +\texttt{retry.sh}, \texttt{run.sh}, \texttt{snapshot.sh}, +\texttt{summary.sh}, \texttt{sys.sh}, \texttt{tui.sh}, +\texttt{ui.sh}, \texttt{update.sh}, \texttt{wizard.sh}, +\texttt{help.txt}. + +\paragraph{PowerShell (\texttt{src/pslib/})} +\texttt{Args.ps1}, \texttt{Clean.ps1}, \texttt{Doctor.ps1}, +\texttt{Hooks.ps1}, \texttt{Log.ps1}, \texttt{Notify.ps1}, +\texttt{Packages.ps1}, \texttt{Profiles.ps1}, \texttt{Summary.ps1}, +\texttt{Sys.ps1}, \texttt{UI.ps1}, \texttt{Update.ps1}, +\texttt{Help.txt}. + +Adding a new package manager means extending +\texttt{src/lib/packages.sh} on the Unix side or +\texttt{src/pslib/Packages.ps1} on the Windows side; both are +table-driven dispatchers. + +%------------------------------------------------------- +\section{Supported package managers} +%------------------------------------------------------- \begin{itemize} -\item The user install eMerger by launching \textit{setup.sh} -\item The user uninstall eMerger by launching \textit{uninstall.sh} -\item The user launches a normal update by typing \textit{up} -\item The user launches an update but he would like to knoe the weather by typing \textit{up -w} -\item The user updates eMerger by typing \textit{up -up} -\item There's an error, then the user can revel it by typing \textit{up -err} + \item \textbf{Linux, system (sudo):} \texttt{pacman}, \texttt{apt}, + \texttt{apt-get}, \texttt{dnf}, \texttt{yum}, \texttt{zypper}, + \texttt{xbps}, \texttt{apk}, \texttt{eopkg}, \texttt{emerge}, + \texttt{nixos-rebuild}, \texttt{fwupdmgr}, \texttt{snap}. + \item \textbf{Linux, AUR (no sudo):} \texttt{yay}, \texttt{paru}. + \item \textbf{Linux, user-space:} \texttt{flatpak}, \texttt{nix-env}. + \item \textbf{macOS:} \texttt{softwareupdate}, \texttt{brew}, + \texttt{brew --cask}, \texttt{mas}. + \item \textbf{Windows:} \texttt{winget}, \texttt{scoop}, + \texttt{choco}, \texttt{PSWindowsUpdate}, \texttt{wsl --update}. + \item \textbf{Dev toolchains (all platforms, opt-in):} \texttt{rustup}, + \texttt{cargo install-update}, \texttt{npm}, \texttt{pnpm}, + \texttt{pip}, \texttt{gem}. \end{itemize} -There are a few more cases but here we shared the most commons one.\\ -\textbf{If you still have some questions, you can explore our code on the repository or ask directly to us by creating a new issue!} -\end{document} \ No newline at end of file + +%------------------------------------------------------- +\section{Exit codes} +%------------------------------------------------------- +\begin{center} +\begin{tabular}{@{}cl@{}} +\toprule +\textbf{Code} & \textbf{Meaning} \\ +\midrule +0 & Success \\ +1 & Runtime failure (sudo, lock, disk, interrupted) \\ +2 & Argument parsing error \\ +3 & One or more package managers returned non-zero \\ +4 & Reboot required (only with \texttt{-\/-reboot-exit}) \\ +\bottomrule +\end{tabular} +\end{center} + +%------------------------------------------------------- +\section{Troubleshooting} +%------------------------------------------------------- +\textbf{Another eMerger run is in progress.} A stale \texttt{flock} on +\verb|/tmp/emerger.lock|. Inspect \texttt{ps} for stragglers, then +remove the lock file. + +\textbf{A manager fails with exit code 3.} Run \texttt{up -\/-errors} +to tail the log, then \texttt{up -\/-doctor} to inspect the environment. +Most failures come from a manager's own health state (for example +\texttt{dpkg} being interrupted); run the native repair command before +retrying. + +\textbf{Nothing happens on scheduled runs.} Check +\texttt{systemctl -\/-user status emerger.timer} or the Windows Task +Scheduler entry. On Unix the scheduled run always uses +\texttt{-y -q -nl -ni}; enable \texttt{-v} in the unit for one cycle to +see the output. + +%------------------------------------------------------- +\section{Contributing} +%------------------------------------------------------- +Pull requests and issues are welcome on +\href{https://github.com/MasterCruelty/eMerger}{GitHub}. Before opening +a PR, run the test suite in \texttt{tests/} on the platform you are +touching, and make sure the feature is covered on both the Bash and the +PowerShell sides when it makes sense for both platforms. + +\vspace{1em} +\hrule +\vspace{0.5em} +\noindent\textit{If your question is not answered here, open an issue on +GitHub: we would rather improve the documentation than answer the same +question twice.} + +\end{document} diff --git a/man/up.1 b/man/up.1 new file mode 100644 index 0000000..6f772fd --- /dev/null +++ b/man/up.1 @@ -0,0 +1,85 @@ +.TH UP 1 "2026" "eMerger 2.0" "User Commands" +.SH NAME +up \- eMerger, one-command system updater +.SH SYNOPSIS +.B up +[\fIoptions\fR] +.SH DESCRIPTION +eMerger detects installed package managers on the host and runs each of them +in turn to refresh, upgrade and clean the system. It also offers optional +cleanup of the user cache and trash. +.SH OPTIONS +.TP +.B -h, --help +Show help and exit. +.TP +.B -V, --version +Show version and exit. +.TP +.B -i, --interactive +Interactive menu (gum, whiptail, or plain fallback). +.TP +.B -n, --dry-run +Print what would be done; do nothing. +.TP +.B -v, --verbose +Stream package manager output live. +.TP +.B -q, --quiet +Minimal output. +.TP +.B -y, --yes +Assume "yes" on prompts. +.TP +.B --security +Only security updates when the manager supports them. +.TP +.B --firmware +Include firmware updates via fwupdmgr. +.TP +.B --dev +Include dev toolchains (rustup, cargo, npm, pnpm, pip, gem). +.TP +.B --parallel +Run independent user-space managers in parallel. +.TP +.B -nl, -ni, -nc, -nt +Skip logo, system info, cache clean, trash clean. +.TP +.B -w, --weather +Show the current weather. +.TP +.B -up +Self-update eMerger via git. +.TP +.B -au +Install a weekly auto-update (systemd user timer or cron). +.TP +.B -err +Print logged errors. +.TP +.B --history +Print a summary of recent runs. +.SH FILES +.TP +.I ~/.config/emerger/config.sh +Sourced before argument parsing. +.TP +.I ~/.config/emerger/hooks/pre.d/*.sh, post.d/*.sh +User hook scripts. +.TP +.I ~/.local/state/emerger/emerger.log +Log file. +.TP +.I ~/.local/state/emerger/history.jsonl +One JSON record per run. +.SH EXIT STATUS +.TP +0 success +.TP +1 runtime failure +.TP +2 argument parsing error +.SH SEE ALSO +.BR cron (8), +.BR systemd.timer (5) diff --git a/setup.ps1 b/setup.ps1 new file mode 100644 index 0000000..8fc134e --- /dev/null +++ b/setup.ps1 @@ -0,0 +1,69 @@ +#Requires -Version 5.1 +<# +.SYNOPSIS + Install eMerger on Windows: register the `up` function, ensure execution + policy allows it, scaffold %APPDATA%\emerger. +#> +[CmdletBinding()] +param() + +$ErrorActionPreference = 'Stop' +$REPO = Split-Path -Parent $PSCommandPath +. "$REPO\src\pslib\UI.ps1" +. "$REPO\src\pslib\Sys.ps1" + +UI-Title 'eMerger setup (Windows)' + +# ExecutionPolicy fix. +$ep = Get-ExecutionPolicy -Scope CurrentUser +if ($ep -eq 'Restricted' -or $ep -eq 'Undefined') { + UI-Info "ExecutionPolicy is '$ep'; setting to RemoteSigned for CurrentUser." + try { + Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy RemoteSigned -Force + UI-Ok 'ExecutionPolicy updated.' + } catch { + UI-Warn "Could not change ExecutionPolicy: $($_.Exception.Message)" + } +} + +# PowerShell profile: add `up` function. +$profilePath = $PROFILE.CurrentUserAllHosts +$profileDir = Split-Path $profilePath +if (-not (Test-Path $profileDir)) { New-Item -ItemType Directory -Path $profileDir -Force | Out-Null } +if (-not (Test-Path $profilePath)) { New-Item -ItemType File -Path $profilePath -Force | Out-Null } + +$entry = "$REPO\src\emerger.ps1" +$existing = Get-Content $profilePath -Raw -ErrorAction SilentlyContinue +if ($existing -and $existing -match 'emerger\.ps1') { + UI-Ok "'up' already registered in $profilePath" +} else { + $block = @" + +# eMerger (https://github.com/MasterCruelty/eMerger) +function up { & "$entry" @args } +"@ + Add-Content -Path $profilePath -Value $block + UI-Ok "Added 'up' function to $profilePath" +} + +# Config + hooks + profiles skeleton. +$cfg = Join-Path $env:APPDATA 'emerger' +@('hooks\pre.d','hooks\post.d','profiles.d') | ForEach-Object { + $p = Join-Path $cfg $_ + if (-not (Test-Path $p)) { New-Item -ItemType Directory -Path $p -Force | Out-Null } +} + +$configFile = Join-Path $cfg 'config.ps1' +if (-not (Test-Path $configFile)) { + @' +# eMerger user config (Windows). Dot-sourced before argument parsing. +# Uncomment to set defaults. + +# $script:ArgsGlobal.Dev = $true +# $script:ArgsGlobal.NoTrash = $true +# $script:ArgsGlobal.Security = $true +'@ | Set-Content $configFile -Encoding UTF8 + UI-Ok "Created $configFile" +} + +UI-Info "Open a new PowerShell window (or: . `$PROFILE) and run: up --help" diff --git a/setup.sh b/setup.sh index f69b43b..0e232e1 100755 --- a/setup.sh +++ b/setup.sh @@ -1,34 +1,115 @@ -#!/bin/bash - -source src/utils/global.sh 2>>.log -puts RED "Setup: starting" - -EXST=$(cat ~/.bashrc | grep -c "emerger.sh") -if [[ $EXST -ne 0 ]]; then - puts GREEN "Alias 'up' already exists. Use 'up' or run './src/emerger.sh'" - source src/test/integrity_check.sh 2>>.log - puts GREEN "Setup: completed $COOL" -else - source src/utils/cache_gen.sh > src/utils/.cache 2>>.log - md5sum src/utils/.cache | cut -d " " -f1 > src/utils/.md5 2>>.log - chmod 775 src/utils/.cache 2>>.log - chmod 775 src/utils/.md5 2>>.log - - echo "alias up='bash $(pwd)/src/emerger.sh'" >> ~/.bashrc - chmod +x src/emerger.sh 2>>.log - puts GREEN "Alias 'up' added.\nUse 'up' or run './src/emerger.sh'" - source src/test/integrity_check.sh 2>>.log - puts GREEN "Setup: completed $COOL" +#!/usr/bin/env bash +set -Eeuo pipefail + +REPO_DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) + +# shellcheck source=src/lib/ui.sh +source "$REPO_DIR/src/lib/ui.sh" +# shellcheck source=src/lib/sys.sh +source "$REPO_DIR/src/lib/sys.sh" + +ui_title "eMerger setup" + +ALIAS_CMD="bash \"$REPO_DIR/src/emerger.sh\"" + +_add_alias_bashzsh() { + local rc="$1" + touch "$rc" + if grep -q "emerger.sh" "$rc"; then + ui_ok "Alias already present in $rc" + return + fi + { + printf '\n# eMerger (https://github.com/MasterCruelty/eMerger)\n' + printf "alias up='%s'\n" "$ALIAS_CMD" + } >>"$rc" + ui_ok "Added 'up' alias to $rc" +} + +_add_alias_fish() { + local conf="$HOME/.config/fish/config.fish" + mkdir -p "$(dirname "$conf")" + touch "$conf" + if grep -q "emerger.sh" "$conf"; then + ui_ok "Alias already present in $conf" + return + fi + { + printf '\n# eMerger\n' + printf "alias up '%s'\n" "$ALIAS_CMD" + } >>"$conf" + ui_ok "Added 'up' alias to $conf" +} + +installed_any=0 +# macOS default shell is zsh (since Catalina); prioritize accordingly. +if sys_is_macos; then + _add_alias_bashzsh "${ZDOTDIR:-$HOME}/.zshrc"; installed_any=1 + [[ -f "$HOME/.bashrc" ]] && { _add_alias_bashzsh "$HOME/.bashrc"; } +elif [[ -f "$HOME/.bashrc" ]] || [[ $(basename "${SHELL:-}") == bash ]]; then + _add_alias_bashzsh "$HOME/.bashrc"; installed_any=1 +fi +if [[ -f "$HOME/.zshrc" ]] || [[ $(basename "${SHELL:-}") == zsh ]]; then + _add_alias_bashzsh "${ZDOTDIR:-$HOME}/.zshrc"; installed_any=1 +fi +if [[ -f "$HOME/.config/fish/config.fish" ]] || [[ $(basename "${SHELL:-}") == fish ]]; then + _add_alias_fish; installed_any=1 fi +if (( ! installed_any )); then + _add_alias_bashzsh "$(sys_shell_rc)" +fi + +chmod +x "$REPO_DIR/src/emerger.sh" + +# Install shell completions if the user's dirs exist. +install_completion() { + local src="$1" dest="$2" + [[ -f $src ]] || return 0 + mkdir -p "$(dirname "$dest")" + if [[ -e $dest ]] && ! diff -q "$src" "$dest" >/dev/null 2>&1; then + cp -f "$dest" "$dest.backup-$(date +%s)" + fi + install -m 0644 "$src" "$dest" + ui_ok "Installed completion: $dest" +} -# Open a new terminal -TERMINAL=$(cat src/utils/.cache | head -n 2 | tail -n 1) -if [[ $TERMINAL == "unknown" ]]; then - exec bash - exit 0 -else - read -p "$(echo -e ${RED}Press enter, this process will be killed${NORMAL})" - - $TERMINAL 2>>.log - kill -9 $PPID +bash_comp="${BASH_COMPLETION_USER_DIR:-$HOME/.local/share/bash-completion/completions}" +zsh_comp="$HOME/.zsh/completions" +fish_comp="$HOME/.config/fish/completions" +# On macOS with Homebrew, prefer brew's own completion dirs. +if brew_prefix=$(sys_brew_prefix); then + [[ -d "$brew_prefix/etc/bash_completion.d" ]] && bash_comp="$brew_prefix/etc/bash_completion.d" + [[ -d "$brew_prefix/share/zsh/site-functions" ]] && zsh_comp="$brew_prefix/share/zsh/site-functions" fi + +install_completion "$REPO_DIR/completions/up.bash" "$bash_comp/up" +install_completion "$REPO_DIR/completions/_up" "$zsh_comp/_up" +install_completion "$REPO_DIR/completions/up.fish" "$fish_comp/up.fish" + +# Default config skeleton. +CONFIG_DIR="${XDG_CONFIG_HOME:-$HOME/.config}/emerger" +mkdir -p "$CONFIG_DIR/hooks/pre.d" "$CONFIG_DIR/hooks/post.d" "$CONFIG_DIR/profiles.d" +if [[ ! -f "$CONFIG_DIR/config.sh" ]]; then + cat >"$CONFIG_DIR/config.sh" <<'EOF' +# eMerger user config. Sourced before argument parsing. +# Uncomment to change defaults. + +# ARG_DEV=1 # always include dev toolchains +# ARG_WEATHER=1 # always show weather +# ARG_NO_TRASH=1 # never touch trash +# DISK_MIN_FREE_MB=2048 +# QUIET_HOURS="23:00-07:00" # skip when timer fires inside this window +EOF + ui_ok "Created $CONFIG_DIR/config.sh" +fi +if [[ ! -f "$CONFIG_DIR/ignore.list" ]]; then + cat >"$CONFIG_DIR/ignore.list" <<'EOF' +# eMerger ignore list: one package name per line. Comments with #. +# Note: pacman honors this natively via --ignore. +# For apt use: sudo apt-mark hold +# For dnf use: sudo dnf versionlock add +EOF + ui_ok "Created $CONFIG_DIR/ignore.list" +fi + +ui_info "Open a new shell (or 'source ~/.bashrc') and run: up --help" diff --git a/share/plugins/example.sh b/share/plugins/example.sh new file mode 100644 index 0000000..4576f9b --- /dev/null +++ b/share/plugins/example.sh @@ -0,0 +1,23 @@ +#!/usr/bin/env bash +# Example eMerger plugin. Copy to ~/.config/emerger/managers.d/.sh +# and edit. The slug below becomes the manager name shown by eMerger. + +PM_PLUGIN_SLUG=example + +pm_example_detect() { + # Return 0 if the tool is installed on this system. + command -v example-tool >/dev/null 2>&1 +} + +pm_example_needs_sudo() { return 1; } # remove or flip to 0 if sudo is needed +pm_example_parallel() { return 0; } # safe to run concurrently with others +pm_example_dev() { return 1; } # return 0 to gate under --dev + +pm_example_icon() { printf '\xf0\x9f\x94\x8c'; } # plug emoji + +pm_example_run() { + # Use run_cmd so --dry-run, --verbose, retry, logging all work. + run_cmd "example refresh" example-tool refresh || return 1 + run_cmd "example upgrade" example-tool upgrade -y || return 1 + return 0 +} diff --git a/share/profiles/home.ps1 b/share/profiles/home.ps1 new file mode 100644 index 0000000..9215b5d --- /dev/null +++ b/share/profiles/home.ps1 @@ -0,0 +1,2 @@ +# description: PC fisso a casa - tutto, dev toolchains incluse +$script:ArgsGlobal.Dev = $true diff --git a/share/profiles/home.sh b/share/profiles/home.sh new file mode 100644 index 0000000..fdca3cf --- /dev/null +++ b/share/profiles/home.sh @@ -0,0 +1,5 @@ +# description: PC fisso a casa - tutto, in parallelo, anche firmware e dev +ARG_DEV=1 +ARG_FIRMWARE=1 +ARG_PARALLEL=1 +ARG_WEATHER=1 diff --git a/share/profiles/safe.ps1 b/share/profiles/safe.ps1 new file mode 100644 index 0000000..63db271 --- /dev/null +++ b/share/profiles/safe.ps1 @@ -0,0 +1,5 @@ +# description: pre-presentazione - security only, niente cache/trash +$script:ArgsGlobal.Security = $true +$script:ArgsGlobal.Yes = $true +$script:ArgsGlobal.NoCache = $true +$script:ArgsGlobal.NoTrash = $true diff --git a/share/profiles/safe.sh b/share/profiles/safe.sh new file mode 100644 index 0000000..d251954 --- /dev/null +++ b/share/profiles/safe.sh @@ -0,0 +1,6 @@ +# description: pre-presentazione - solo security, niente flatpak/snap pesanti +ARG_SECURITY=1 +ARG_YES=1 +ARG_NO_CACHE=1 +ARG_NO_TRASH=1 +ARG_NO_FIRMWARE=1 diff --git a/share/profiles/server.ps1 b/share/profiles/server.ps1 new file mode 100644 index 0000000..29b794c --- /dev/null +++ b/share/profiles/server.ps1 @@ -0,0 +1,8 @@ +# description: headless / unattended - security, quiet, nessun prompt +$script:ArgsGlobal.Security = $true +$script:ArgsGlobal.Yes = $true +$script:ArgsGlobal.NoLogo = $true +$script:ArgsGlobal.NoInfo = $true +$script:ArgsGlobal.NoCache = $true +$script:ArgsGlobal.NoTrash = $true +$script:QUIET_LEVEL = 2 diff --git a/share/profiles/server.sh b/share/profiles/server.sh new file mode 100644 index 0000000..1a59345 --- /dev/null +++ b/share/profiles/server.sh @@ -0,0 +1,10 @@ +# description: headless/unattended - quiet, security, niente prompt, niente UI +ARG_SECURITY=1 +ARG_YES=1 +ARG_QUIET=1 +QUIET_LEVEL=2 +ARG_NO_LOGO=1 +ARG_NO_INFO=1 +ARG_NO_CACHE=1 +ARG_NO_TRASH=1 +ARG_NO_FIRMWARE=1 diff --git a/share/profiles/work.ps1 b/share/profiles/work.ps1 new file mode 100644 index 0000000..72470ff --- /dev/null +++ b/share/profiles/work.ps1 @@ -0,0 +1,5 @@ +# description: laptop al lavoro - security, unattended, niente cache/trash +$script:ArgsGlobal.Security = $true +$script:ArgsGlobal.Yes = $true +$script:ArgsGlobal.NoCache = $true +$script:ArgsGlobal.NoTrash = $true diff --git a/share/profiles/work.sh b/share/profiles/work.sh new file mode 100644 index 0000000..9808bb5 --- /dev/null +++ b/share/profiles/work.sh @@ -0,0 +1,6 @@ +# description: laptop al lavoro - solo security, niente firmware/AUR, riavvio mai +ARG_SECURITY=1 +ARG_YES=1 +ARG_NO_FIRMWARE=1 +ARG_NO_CACHE=1 +ARG_NO_TRASH=1 diff --git a/src/emerger.ps1 b/src/emerger.ps1 new file mode 100644 index 0000000..8c30f22 --- /dev/null +++ b/src/emerger.ps1 @@ -0,0 +1,178 @@ +#Requires -Version 5.1 +[CmdletBinding()] +param( + [Parameter(ValueFromRemainingArguments = $true)] + [string[]]$Arguments +) + +$ErrorActionPreference = 'Stop' + +# Paths. +$script:EMERGER_SRC = $PSScriptRoot +$script:EMERGER_ROOT = Split-Path -Parent $script:EMERGER_SRC +$script:EMERGER_LIB = Join-Path $script:EMERGER_SRC 'pslib' +$versionFile = Join-Path $script:EMERGER_ROOT 'VERSION' +$script:EMERGER_VERSION = if (Test-Path $versionFile) { (Get-Content $versionFile -Raw).Trim() } else { '0.0.0' } + +$script:EMERGER_CONFIG = Join-Path $env:APPDATA 'emerger' +$script:EMERGER_CACHE = Join-Path $env:LOCALAPPDATA 'emerger\cache' +$script:EMERGER_STATE = Join-Path $env:LOCALAPPDATA 'emerger\state' +foreach ($d in @($script:EMERGER_CONFIG, $script:EMERGER_CACHE, $script:EMERGER_STATE)) { + if (-not (Test-Path $d)) { New-Item -ItemType Directory -Path $d -Force | Out-Null } +} + +# Load libs. +. (Join-Path $script:EMERGER_LIB 'UI.ps1') +. (Join-Path $script:EMERGER_LIB 'Log.ps1') +. (Join-Path $script:EMERGER_LIB 'Sys.ps1') +. (Join-Path $script:EMERGER_LIB 'Args.ps1') +. (Join-Path $script:EMERGER_LIB 'Packages.ps1') +. (Join-Path $script:EMERGER_LIB 'Clean.ps1') +. (Join-Path $script:EMERGER_LIB 'Hooks.ps1') +. (Join-Path $script:EMERGER_LIB 'Update.ps1') +. (Join-Path $script:EMERGER_LIB 'Notify.ps1') +. (Join-Path $script:EMERGER_LIB 'Summary.ps1') +. (Join-Path $script:EMERGER_LIB 'Doctor.ps1') +. (Join-Path $script:EMERGER_LIB 'Profiles.ps1') + +# User config. +$userCfg = Join-Path $script:EMERGER_CONFIG 'config.ps1' +if (Test-Path $userCfg) { . $userCfg } + +# Profile prescan (profile sets defaults, CLI wins). +$profileName = Args-Prescan-Profile $Arguments +if ($profileName) { Load-Profile $profileName } + +# Parse CLI flags. +$script:ArgsGlobal = Parse-Args $Arguments +$script:Summary = New-Object System.Collections.Generic.List[PSCustomObject] + +Log-Init + +# Subcommand-style short-circuits. +if ($script:ArgsGlobal.Help) { Get-Content (Join-Path $script:EMERGER_LIB 'Help.txt') ; exit 0 } +if ($script:ArgsGlobal.Version) { Write-Host "eMerger $script:EMERGER_VERSION"; exit 0 } +if ($script:ArgsGlobal.Errors) { Show-Errors; exit 0 } +if ($script:ArgsGlobal.History) { Show-History; exit 0 } +if ($script:ArgsGlobal.Doctor) { $rc = Doctor-Run; exit $rc } +if ($script:ArgsGlobal.SelfUpdate) { $rc = Self-Update $script:EMERGER_ROOT; exit $rc } +if ($script:ArgsGlobal.AutoUpdate) { $rc = Setup-Task $script:EMERGER_ROOT; exit $rc } +if ($script:ArgsGlobal.ListProfiles) { List-Profiles; exit 0 } +if ($script:ArgsGlobal.Metrics) { + $hist = Join-Path $script:EMERGER_STATE 'history.jsonl' + if (-not (Test-Path $hist)) { UI-Err 'No history yet'; exit 1 } + $last = Get-Content $hist -Tail 1 | ConvertFrom-Json + $epoch = [int64](([DateTime]$last.ts).ToUniversalTime() - [DateTime]'1970-01-01').TotalSeconds + $tmp = "$($script:ArgsGlobal.Metrics).tmp" + $out = @() + $out += "# HELP emerger_last_run_timestamp_seconds Unix timestamp of the last eMerger run" + $out += "# TYPE emerger_last_run_timestamp_seconds gauge" + $out += "emerger_last_run_timestamp_seconds $epoch" + $out += "# HELP emerger_last_run_duration_seconds Duration of the last run" + $out += "# TYPE emerger_last_run_duration_seconds gauge" + $out += "emerger_last_run_duration_seconds $($last.duration)" + $out += "# HELP emerger_last_run_errors Manager failures in the last run" + $out += "# TYPE emerger_last_run_errors gauge" + $out += "emerger_last_run_errors $($last.errors)" + $out += "# HELP emerger_reboot_required Whether a reboot is pending (0/1)" + $out += "# TYPE emerger_reboot_required gauge" + $out += "emerger_reboot_required $($last.reboot)" + $out += "# HELP emerger_manager_ok Per-manager success (1=ok,0=fail)" + $out += "# TYPE emerger_manager_ok gauge" + foreach ($m in $last.managers) { + $v = if ($m.result -eq 'ok') { 1 } else { 0 } + $out += "emerger_manager_ok{manager=`"$($m.name)`"} $v" + } + $out | Set-Content -Path $tmp + Move-Item -Force $tmp $script:ArgsGlobal.Metrics + UI-Ok "metrics written to $($script:ArgsGlobal.Metrics)" + exit 0 +} +if ($script:ArgsGlobal.RebuildCache) { + Remove-Item $script:EMERGER_CACHE -Recurse -Force -ErrorAction SilentlyContinue + New-Item -ItemType Directory -Path $script:EMERGER_CACHE -Force | Out-Null + UI-Ok 'Detection cache cleared' +} +if ($script:ArgsGlobal.Reboot) { + if (Reboot-Pending) { + UI-Warn 'Rebooting now.' + Restart-Computer -Force + exit 0 + } else { UI-Ok 'No reboot needed.'; exit 0 } +} + +# Elevation: relaunch elevated if any detected manager needs it. +if (Pkg-Need-Admin-Any -IncludeDev:$script:ArgsGlobal.Dev) { + if (-not (Sys-IsAdmin) -and -not $script:ArgsGlobal.DryRun) { + UI-Warn 'Admin privileges required by one of the detected managers. Relaunching elevated…' + Log-Info 'relaunching elevated' + Sys-Start-Elevated (Join-Path $script:EMERGER_SRC 'emerger.ps1') $Arguments + exit 0 + } +} + +# Battery check. +if (Sys-On-Battery) { + $pct = Sys-Battery-Percent + if ($pct -lt 20 -and -not $script:ArgsGlobal.Yes) { + UI-Warn "On battery at ${pct}%. Updates are I/O heavy." + $a = Read-Host ' Continue anyway? [y/N]' + if ($a -notmatch '^[Yy]') { UI-Muted 'Aborted.'; exit 0 } + } +} + +# Main flow. +$start = [DateTime]::UtcNow + +if ($script:ArgsGlobal.Json) { + $script:ArgsGlobal.NoLogo = $true; $script:ArgsGlobal.NoInfo = $true; $script:QUIET_LEVEL = 3 +} +if (-not $script:ArgsGlobal.NoLogo -and $script:QUIET_LEVEL -lt 1) { + UI-Logo (Join-Path $script:EMERGER_SRC 'logo\logo.txt') +} +if ($script:QUIET_LEVEL -lt 2) { + if (-not $script:ArgsGlobal.NoInfo) { + UI-Muted ("{0} $(UI-Glyph dot) {1} $(UI-Glyph dot) {2}" -f (Sys-OS), (Sys-Arch), (Get-Date -Format 'yyyy-MM-dd HH:mm')) + } + UI-Muted ("eMerger v$script:EMERGER_VERSION $(UI-Glyph dot) github.com/MasterCruelty/eMerger") +} + +Hooks-Run 'pre' + +$detected = Pkg-Detect-All -IncludeDev:$script:ArgsGlobal.Dev +$total = $detected.Count +if ($total -eq 0) { UI-Warn 'No supported package managers detected.' } + +$onlyList = @(); if ($script:ArgsGlobal.Only) { $onlyList = $script:ArgsGlobal.Only -split ',' | ForEach-Object { $_.Trim() } } +$exceptList = @(); if ($script:ArgsGlobal.Except) { $exceptList = $script:ArgsGlobal.Except -split ',' | ForEach-Object { $_.Trim() } } + +$filtered = @() +foreach ($m in $detected) { + if ($onlyList.Count -gt 0 -and ($onlyList -notcontains $m)) { continue } + if ($exceptList.Count -gt 0 -and ($exceptList -contains $m)) { UI-Muted "skip $m (--except)"; continue } + $filtered += $m +} +$detected = $filtered +$total = $detected.Count + +$i = 0 +foreach ($m in $detected) { + $i++ + UI-Step $i $total $m + $ok = Pkg-Run $m + $script:Summary.Add([pscustomobject]@{ Name = $m; Result = $(if ($ok) { 'ok' } else { 'fail' }) }) +} + +if (-not $script:ArgsGlobal.NoCache) { Clean-Temp } +if (-not $script:ArgsGlobal.NoTrash) { Clean-RecycleBin } + +Hooks-Run 'post' + +$duration = [int]([DateTime]::UtcNow - $start).TotalSeconds +Summary-Print $duration +Notify-Send-Result + +$errors = @($script:Summary | Where-Object { $_.Result -eq 'fail' }).Count +if ($errors -gt 0) { exit 3 } +if ($script:ArgsGlobal.RebootExit -and (Reboot-Pending)) { exit 4 } +exit 0 diff --git a/src/emerger.sh b/src/emerger.sh index 4703ff7..7b8f678 100755 --- a/src/emerger.sh +++ b/src/emerger.sh @@ -1,114 +1,328 @@ -#!/bin/bash +#!/usr/bin/env bash +# eMerger - one-command system updater. +# Entry point: arg parsing + orchestration. Logic lives in src/lib/. -SRC=$(dirname "$(readlink -f "$0")") -ROOT=${SRC::-3} -source $SRC/utils/global.sh +set -Eeuo pipefail +IFS=$'\n\t' -# Create .log if it doesn't exist -if [[ ! -f $ROOT.log ]]; then - printf "" > $ROOT.log -fi +EMERGER_SRC=$(dirname "$(readlink -f "${BASH_SOURCE[0]}")") +EMERGER_ROOT=$(dirname "$EMERGER_SRC") +EMERGER_LIB="$EMERGER_SRC/lib" +EMERGER_VERSION=$(cat "$EMERGER_ROOT/VERSION" 2>/dev/null || echo "0.0.0") + +: "${XDG_CACHE_HOME:=$HOME/.cache}" +: "${XDG_CONFIG_HOME:=$HOME/.config}" +: "${XDG_STATE_HOME:=$HOME/.local/state}" +EMERGER_CACHE="$XDG_CACHE_HOME/emerger" +EMERGER_CONFIG="$XDG_CONFIG_HOME/emerger" +EMERGER_STATE="$XDG_STATE_HOME/emerger" +mkdir -p "$EMERGER_CACHE" "$EMERGER_STATE" -# Clear .log if it gets too long (keep only the last 256 lines) -# Given no errors, the max file size is 7KB -if [[ $(wc -l < $ROOT.log) -gt 256 ]]; then - printf "$(tail -n 256 $ROOT.log)\n" > $ROOT.log +# shellcheck source=lib/ui.sh +source "$EMERGER_LIB/ui.sh" +# shellcheck source=lib/log.sh +source "$EMERGER_LIB/log.sh" +# shellcheck source=lib/sys.sh +source "$EMERGER_LIB/sys.sh" +# shellcheck source=lib/progress.sh +source "$EMERGER_LIB/progress.sh" +# shellcheck source=lib/estimate.sh +source "$EMERGER_LIB/estimate.sh" +# shellcheck source=lib/retry.sh +source "$EMERGER_LIB/retry.sh" +# shellcheck source=lib/run.sh +source "$EMERGER_LIB/run.sh" +# shellcheck source=lib/args.sh +source "$EMERGER_LIB/args.sh" +# shellcheck source=lib/ignore.sh +source "$EMERGER_LIB/ignore.sh" +# shellcheck source=lib/packages.sh +source "$EMERGER_LIB/packages.sh" +# shellcheck source=lib/clean.sh +source "$EMERGER_LIB/clean.sh" +# shellcheck source=lib/hooks.sh +source "$EMERGER_LIB/hooks.sh" +# shellcheck source=lib/update.sh +source "$EMERGER_LIB/update.sh" +# shellcheck source=lib/notify.sh +source "$EMERGER_LIB/notify.sh" +# shellcheck source=lib/reboot.sh +source "$EMERGER_LIB/reboot.sh" +# shellcheck source=lib/diff.sh +source "$EMERGER_LIB/diff.sh" +# shellcheck source=lib/disk.sh +source "$EMERGER_LIB/disk.sh" +# shellcheck source=lib/snapshot.sh +source "$EMERGER_LIB/snapshot.sh" +# shellcheck source=lib/mirrors.sh +source "$EMERGER_LIB/mirrors.sh" +# shellcheck source=lib/resume.sh +source "$EMERGER_LIB/resume.sh" +# shellcheck source=lib/lock.sh +source "$EMERGER_LIB/lock.sh" +# shellcheck source=lib/doctor.sh +source "$EMERGER_LIB/doctor.sh" +# shellcheck source=lib/changelog.sh +source "$EMERGER_LIB/changelog.sh" +# shellcheck source=lib/report.sh +source "$EMERGER_LIB/report.sh" +# shellcheck source=lib/wizard.sh +source "$EMERGER_LIB/wizard.sh" +# shellcheck source=lib/profiles.sh +source "$EMERGER_LIB/profiles.sh" +# shellcheck source=lib/summary.sh +source "$EMERGER_LIB/summary.sh" +# shellcheck source=lib/tui.sh +source "$EMERGER_LIB/tui.sh" +# shellcheck source=lib/plugins.sh +source "$EMERGER_LIB/plugins.sh" +# shellcheck source=lib/metrics.sh +source "$EMERGER_LIB/metrics.sh" + +# 1) User global config +if [[ -f "$EMERGER_CONFIG/config.sh" ]]; then + # shellcheck disable=SC1091 + source "$EMERGER_CONFIG/config.sh" fi -# If the script got interrupted, history still exists and has to be cleaned -echo -n "" > $SRC/.hist +# 2) Profile (if --profile seen in argv) - loaded BEFORE explicit flags so +# CLI overrides stay authoritative. +args_prescan_profile "$@" +[[ -n ${PROFILE_PRELOAD:-} ]] && profile_load "$PROFILE_PRELOAD" -ARGC=$# -ARGV=$@ +# 3) Explicit CLI flags +args_parse "$@" -# Check if arguments passed exist -if [[ $ARGC -gt 0 ]]; then - source $SRC/test/argument_check.sh $ARGV +# Quiet-hours gating (user can set QUIET_HOURS="22:00-07:00" in config). +if [[ -n ${QUIET_HOURS:-} ]] && (( ARG_YES )); then + _now=$(date +%H%M) + _from=$(printf '%s' "${QUIET_HOURS%%-*}" | tr -d :) + _to=$(printf '%s' "${QUIET_HOURS##*-}" | tr -d :) + if (( _from < _to )); then + (( _now >= _from && _now < _to )) && { echo "quiet hours, skipping"; exit 0; } + else + (( _now >= _from || _now < _to )) && { echo "quiet hours, skipping"; exit 0; } + fi fi -if [[ $ARGV =~ "-help" ]]; then - cat $SRC/utils/help -elif [[ $ARGV =~ "-err" ]]; then - if [[ $(grep -cv "[0-9]*/[0-9]*/[0-9]* [0-9]*:[0-9]*:[0-9]*:[0-9]*" $ROOT.log) -gt 0 ]]; then - puts RED "Errors found\nOpen .log in $ROOT to see what's wrong" - else - puts GREEN "No errors found" +SUDO_KEEPALIVE_PID=0 +_cleanup() { + ui_monitor_stop + if (( SUDO_KEEPALIVE_PID > 0 )); then + kill "$SUDO_KEEPALIVE_PID" 2>/dev/null || true fi -elif [[ $ARGV =~ "-up" ]]; then - source ${ROOT}update.sh $ROOT -elif [[ $ARGV =~ "-xyzzy" ]]; then - puts NC "Let's keep its memory alive" -else - if [[ -f "$SRC/utils/.cache" && ! $ARGV =~ "-rc" ]]; then - HASH=$(md5sum "$SRC/utils/.cache" | cut -d " " -f1) - if [[ $HASH != $(cat $SRC/utils/.md5) ]]; then - md5sum $SRC/utils/.cache | cut -d " " -f1 > $SRC/utils/.md5 - fi + lock_release +} +trap _cleanup EXIT INT TERM + +log_init + +# Subcommand-style short-circuits. +(( ARG_HELP )) && { cat "$EMERGER_LIB/help.txt"; exit 0; } +(( ARG_VERSION )) && { printf 'eMerger %s\n' "$EMERGER_VERSION"; exit 0; } +(( ARG_ERR )) && { show_errors; exit 0; } +(( ARG_HISTORY )) && { show_history; exit 0; } +(( ARG_CHANGED )) && { diff_show; exit 0; } +(( ARG_DOCTOR )) && { doctor_run; exit $?; } +(( ARG_LIST_PROFILES )) && { profile_list; exit 0; } +[[ -n $ARG_CHANGELOG ]] && { changelog_show "$ARG_CHANGELOG"; exit $?; } +(( ARG_UP )) && { self_update "$EMERGER_ROOT"; exit $?; } +(( ARG_AU )) && { setup_cron "$EMERGER_ROOT"; exit $?; } +(( ARG_RC )) && { rm -rf "$EMERGER_CACHE"; mkdir -p "$EMERGER_CACHE"; ui_ok "Detection cache cleared"; } +[[ -n $ARG_REPORT ]] && { report_export "$ARG_REPORT"; exit $?; } +[[ -n $ARG_METRICS ]] && { metrics_export "$ARG_METRICS"; exit $?; } +(( ARG_ROLLBACK )) && { snapshot_rollback; exit $?; } +if (( ARG_REBOOT )); then + reboot_check + if (( REBOOT_NEEDED )); then + ui_warn "Rebooting now." + exec sudo reboot else - $SRC/utils/cache_gen.sh > $SRC/utils/.cache - md5sum $SRC/utils/.cache | cut -d " " -f1 > $SRC/utils/.md5 - chmod 775 $SRC/utils/.cache + ui_ok "No reboot needed."; exit 0 fi - chmod 775 $SRC/utils/.md5 +fi +(( ARG_INTERACTIVE )) && tui_menu - # Logo - if [[ ! $ARGV =~ "-nl" ]]; then - if [[ $(stty size | awk '{print $2}') -ge 74 ]]; then - puts LOGO "$(cat $SRC/utils/.logo)" - echo "$NORMAL$LOGO$(cat $SRC/utils/.logo)$NORMAL\n" >> $SRC/.hist - fi - puts LOGO "Contribute @ https://github.com/MasterCruelty/eMerger $WHALE" +# First-run wizard (only if interactive and no config). +[[ ! -f $EMERGER_CONFIG/.wizard-done ]] && wizard_maybe_run + +# Global lock. +if ! lock_acquire; then exit 1; fi + +ignore_load +plugins_load +resume_load +# Build --only / --except filters (comma-separated manager names). +_arg_list_has() { + local list="$1" item="$2" x + IFS=',' read -r -a __al <<<"$list" + for x in "${__al[@]}"; do + [[ $x == "$item" ]] && return 0 + done + return 1 +} + +main() { + local start=$SECONDS + + if (( ARG_JSON )); then + ARG_NO_LOGO=1; ARG_NO_INFO=1; QUIET_LEVEL=3 fi - # System informations - if [[ ! $ARGV =~ "-ni" ]]; then - if [[ -f "/etc/os-release" ]]; then - NAME=$(cat /etc/os-release | head -n $(echo $(grep -n "PRETTY_NAME" /etc/os-release) | cut -c 1) | tail -n 1 | cut -c 13-) - puts LOGO "${NAME}" - else - puts LOGO "$(uname -rs)" + if (( ! ARG_NO_LOGO )) && (( ! ARG_QUIET )); then + ui_print_logo "$EMERGER_SRC/logo/logo.txt" + fi + + if (( QUIET_LEVEL < 2 )); then + if (( ! ARG_NO_INFO )); then + ui_muted "$(sys_distro) $(ui_glyph dot) $(uname -m) $(ui_glyph dot) $(date '+%Y-%m-%d %H:%M')" fi + ui_muted "eMerger v$EMERGER_VERSION $(ui_glyph dot) github.com/MasterCruelty/eMerger" fi - # Weather - if [[ $ARGV =~ "-w" ]]; then - # Using wttr.in to show the weather using the following arguments: - # %l = location; %c = weather emoji; %t = actual temp; %w = wind km/h; %m = Moon phase - puts LOGO "$(curl -s wttr.in/?format="%l:+%c+%t+%w+%m")" + if (( ARG_WEATHER )) && sys_has curl; then + local w + w=$(curl -sS --max-time 3 'https://wttr.in/?format=%l:+%c+%t+%w+%m' 2>/dev/null || true) + [[ -n $w ]] && ui_muted "$w" fi - # `tail -n +3` skips the first two lines - # ITER keeps track of iterations ('tail -n 3', so ITER='3-1') - ITER=2 - for LINE in $(cat $SRC/utils/.cache | tail -n +3); do - ITER=$(($ITER + 1)) - if [[ $LINE == "utils/cache" && $ARGV =~ "-nc" ]]; then - continue + ignore_advisory + + # Battery safety. + if sys_on_battery; then + local pct; pct=$(sys_battery_percent) + if (( pct < 20 )) && (( ! ARG_YES )); then + ui_warn "On battery at ${pct}%. Updates are I/O heavy." + local ans + read -r -p " Continue anyway? [y/N]: " ans || ans=n + [[ $ans == [yY]* ]] || { ui_muted "Aborted."; exit 0; } + fi + fi + + disk_precheck + + # sudo keep-alive only if some manager needs it. + local need_sudo=0 m + for m in "${PKG_MANAGERS[@]}"; do + pkg_detect "$m" || continue + pkg_is_dev "$m" && (( ! ARG_DEV )) && continue + [[ $m == fwupd ]] && (( ! ARG_FIRMWARE )) && continue + if pkg_needs_sudo "$m"; then need_sudo=1; break; fi + done + if (( need_sudo )) && (( ! DRY_RUN )) && ! sys_is_root; then + if ! sudo -v; then + ui_err "sudo authentication failed" + exit 1 fi + ( while kill -0 "$$" 2>/dev/null; do sudo -n true 2>/dev/null; sleep 60; done ) & + SUDO_KEEPALIVE_PID=$! + disown "$SUDO_KEEPALIVE_PID" 2>/dev/null || true + fi + + (( ARG_REFRESH_MIRRORS )) && mirrors_refresh + (( ARG_SNAPSHOT )) && snapshot_create + + # Snapshot installed packages for diff. + diff_snapshot "$DIFF_BEFORE" 2>/dev/null || true - if [[ $LINE == "utils/trash" && $ARGV =~ "-nt" ]]; then + hooks_run pre + + local detected=() parallel=() serial=() + for m in "${PKG_MANAGERS[@]}"; do + pkg_detect "$m" || continue + if pkg_is_dev "$m" && (( ! ARG_DEV )); then continue; fi + if [[ $m == fwupd ]]; then + (( ARG_NO_FIRMWARE )) && continue + (( ARG_FIRMWARE )) || continue + fi + if (( ARG_RESUME )) && resume_has "$m"; then + ui_muted "skip $m (resume)"; continue + fi + if [[ -n $ARG_ONLY ]] && ! _arg_list_has "$ARG_ONLY" "$m"; then continue fi + if [[ -n $ARG_EXCEPT ]] && _arg_list_has "$ARG_EXCEPT" "$m"; then + ui_muted "skip $m (--except)"; continue + fi + detected+=("$m") + if (( ARG_PARALLEL )) && pkg_is_parallelizable "$m"; then + parallel+=("$m") + else + serial+=("$m") + fi + done - if [[ $LINE != "" ]]; then - source $SRC/$LINE.sh - if [[ $LINE != "utils/privileges" ]]; then - if [[ $LINE =~ "package/" ]]; then - echo "$BLUE$PKG COMPLETED$NORMAL\n" >> $SRC/.hist - fi - fi + local total=${#detected[@]} + (( total == 0 )) && ui_warn "No supported package managers detected." + + local idx=0 + for m in "${serial[@]}"; do + idx=$((idx+1)) + ui_step "$idx" "$total" "$m" + if pkg_run "$m"; then + SUMMARY_MANAGERS+=("$m"); SUMMARY_RESULTS+=("ok") + resume_mark "$m" + else + SUMMARY_MANAGERS+=("$m"); SUMMARY_RESULTS+=("fail") + SUMMARY_ERRORS=$((SUMMARY_ERRORS+1)) fi done - # Notify if errors are present - if [[ $(grep -v "[0-9]*:[0-9]*:[0-9]*:[0-9]*" $ROOT.log | wc -l) -gt 0 ]]; then - puts LOGO "\n\nSomething is not working correctly, type \"up -err\" for further informations\a" + if (( ${#parallel[@]} > 0 )); then + ui_step "$((idx+1))" "$total" "parallel: ${parallel[*]}" + local pids=() names=() logs=() + for m in "${parallel[@]}"; do + local lf="$EMERGER_STATE/parallel-$m.log" + ( pkg_run "$m" >"$lf" 2>&1 ) & + pids+=($!); names+=("$m"); logs+=("$lf") + done + local i + for i in "${!pids[@]}"; do + if wait "${pids[i]}"; then + SUMMARY_MANAGERS+=("${names[i]}"); SUMMARY_RESULTS+=("ok") + ui_done "${names[i]}" + resume_mark "${names[i]}" + else + SUMMARY_MANAGERS+=("${names[i]}"); SUMMARY_RESULTS+=("fail") + SUMMARY_ERRORS=$((SUMMARY_ERRORS+1)) + ui_fail "${names[i]}" + tail -n 10 "${logs[i]}" | progress_highlight >&2 || true + fi + done fi - echo -ne "\n${BLUE}eMerger COMPLETED$NORMAL\n" -fi + (( ARG_NO_CACHE )) || clean_cache + (( ARG_NO_TRASH )) || clean_trash + + hooks_run post + + # Post-snapshot diff. + diff_snapshot "$DIFF_AFTER" 2>/dev/null || true + diff_compute "$DIFF_BEFORE" "$DIFF_AFTER" "$DIFF_LAST" 2>/dev/null || true + + summary_print $((SECONDS - start)) + notify_send_result -rm $SRC/.hist + # Restart ibus if it's running: updates to ibus/glib/gtk replace files on + # disk while the daemon keeps the old versions mapped in memory, which + # breaks input methods until the daemon is recycled. No-op if absent. + if command -v ibus >/dev/null 2>&1 && pgrep -x ibus-daemon >/dev/null 2>&1; then + ibus restart >/dev/null 2>&1 || true + fi + + # Clean resume file on full success. + if (( SUMMARY_ERRORS == 0 )); then + resume_clear + fi + + # Propagate failure upward. + if (( SUMMARY_ERRORS > 0 )); then + exit 3 + fi + if (( ARG_REBOOT_EXIT )) && (( ${REBOOT_NEEDED:-0} == 1 )); then + exit 4 + fi +} -exit 0 +main diff --git a/src/lib/args.sh b/src/lib/args.sh new file mode 100644 index 0000000..655ff06 --- /dev/null +++ b/src/lib/args.sh @@ -0,0 +1,155 @@ +#!/usr/bin/env bash +# Argument parser. Shift-based so flags can take values. + +ARG_HELP=0; ARG_VERSION=0 +ARG_UP=0; ARG_AU=0; ARG_ERR=0; ARG_RC=0; ARG_HISTORY=0 +ARG_NO_LOGO=0; ARG_NO_INFO=0; ARG_NO_CACHE=0; ARG_NO_TRASH=0 +ARG_WEATHER=0 +ARG_QUIET=0; ARG_VERBOSE=0; ARG_DRY=0 +ARG_INTERACTIVE=0 +ARG_FIRMWARE=0; ARG_NO_FIRMWARE=0; ARG_DEV=0; ARG_SECURITY=0 +ARG_YES=0; ARG_PARALLEL=0 +ARG_NO_EMOJI=0 +ARG_SNAPSHOT=0 +ARG_REFRESH_MIRRORS=0 +ARG_RESUME=0 +ARG_CHANGED=0 +ARG_DOCTOR=0 +ARG_CHANGELOG="" +ARG_REPORT="" +ARG_PROFILE="" +ARG_LIST_PROFILES=0 +ARG_REBOOT=0 +ARG_JSON=0 +ARG_REBOOT_EXIT=0 +ARG_ROLLBACK=0 +ARG_DOWNLOAD_ONLY=0 +ARG_METRICS="" +ARG_ONLY="" +ARG_EXCEPT="" +QUIET_LEVEL=0 + +_missing_value() { printf 'Missing value for %s\n' "$1" >&2; exit 2; } + +# Expand short-flag bundles: "-nv" -> "-n -v", "-ynv" -> "-y -n -v". +# Only bundles whose letters all map to known single-letter short flags are +# expanded; anything else is passed through unchanged so the main parser can +# still error on unknown flags. +_args_expand_bundles() { + local a letters i ch expanded + local -a out=() + for a in "$@"; do + # Known compound short flags that must stay atomic. + case "$a" in + -up|-au|-err|-rc|-nl|-ni|-nc|-nt|-qq|-qqq|-xyzzy|--*|-h|-V|-n|-v|-q|-y|-i|-w) + out+=("$a"); continue ;; + esac + # Only consider single-dash, 3+ chars, no '=', no numerics. + if [[ $a =~ ^-[A-Za-z]{2,}$ ]]; then + letters="${a#-}"; expanded=1 + for (( i=0; i<${#letters}; i++ )); do + ch="${letters:i:1}" + case "$ch" in + h|V|n|v|q|y|i|w) : ;; + *) expanded=0; break ;; + esac + done + if (( expanded )); then + for (( i=0; i<${#letters}; i++ )); do + out+=("-${letters:i:1}") + done + continue + fi + fi + out+=("$a") + done + printf '%s\n' "${out[@]}" +} + +args_parse() { + local -a argv=() + if (( $# > 0 )); then + mapfile -t argv < <(_args_expand_bundles "$@") + fi + set -- "${argv[@]}" + while (( $# > 0 )); do + case "$1" in + -h|--help|-help) ARG_HELP=1 ;; + -V|--version) ARG_VERSION=1 ;; + -up|--self-update) ARG_UP=1 ;; + -au|--auto-update) ARG_AU=1 ;; + -err|--errors) ARG_ERR=1 ;; + -rc|--rebuild-cache) ARG_RC=1 ;; + --history) ARG_HISTORY=1 ;; + + -nl|--no-logo) ARG_NO_LOGO=1 ;; + -ni|--no-info) ARG_NO_INFO=1 ;; + -nc|--no-cache) ARG_NO_CACHE=1 ;; + -nt|--no-trash) ARG_NO_TRASH=1 ;; + -w|--weather) ARG_WEATHER=1 ;; + + -q|--quiet) ARG_QUIET=1; QUIET_LEVEL=$(( QUIET_LEVEL + 1 )) ;; + -qq) ARG_QUIET=1; QUIET_LEVEL=2 ;; + -qqq) ARG_QUIET=1; QUIET_LEVEL=3 ;; + -v|--verbose) ARG_VERBOSE=1; UI_VERBOSE=1 ;; + -n|--dry-run) ARG_DRY=1; DRY_RUN=1 ;; + -i|--interactive) ARG_INTERACTIVE=1 ;; + + --firmware) ARG_FIRMWARE=1 ;; + --no-firmware) ARG_NO_FIRMWARE=1 ;; + --dev) ARG_DEV=1 ;; + --security) ARG_SECURITY=1 ;; + -y|--yes) ARG_YES=1 ;; + --parallel) ARG_PARALLEL=1 ;; + --no-emoji) ARG_NO_EMOJI=1; ui_reinit ;; + + --snapshot) ARG_SNAPSHOT=1 ;; + --refresh-mirrors) ARG_REFRESH_MIRRORS=1 ;; + --resume) ARG_RESUME=1 ;; + --changed) ARG_CHANGED=1 ;; + --reboot) ARG_REBOOT=1 ;; + --reboot-exit) ARG_REBOOT_EXIT=1 ;; + --rollback) ARG_ROLLBACK=1 ;; + --download-only|--offline) ARG_DOWNLOAD_ONLY=1 ;; + --json) ARG_JSON=1 ;; + + --doctor) ARG_DOCTOR=1 ;; + --list-profiles) ARG_LIST_PROFILES=1 ;; + + --profile) shift; [[ $# -gt 0 ]] || _missing_value --profile; ARG_PROFILE="$1" ;; + --profile=*) ARG_PROFILE="${1#*=}" ;; + --changelog) shift; [[ $# -gt 0 ]] || _missing_value --changelog; ARG_CHANGELOG="$1" ;; + --changelog=*) ARG_CHANGELOG="${1#*=}" ;; + --report) shift; [[ $# -gt 0 ]] || _missing_value --report; ARG_REPORT="$1" ;; + --report=*) ARG_REPORT="${1#*=}" ;; + --metrics) shift; [[ $# -gt 0 ]] || _missing_value --metrics; ARG_METRICS="$1" ;; + --metrics=*) ARG_METRICS="${1#*=}" ;; + --only) shift; [[ $# -gt 0 ]] || _missing_value --only; ARG_ONLY="$1" ;; + --only=*) ARG_ONLY="${1#*=}" ;; + --except) shift; [[ $# -gt 0 ]] || _missing_value --except; ARG_EXCEPT="$1" ;; + --except=*) ARG_EXCEPT="${1#*=}" ;; + + -xyzzy) + printf "Let's keep its memory alive.\n"; exit 0 ;; + --) shift; break ;; + *) + printf 'Unknown argument: %s (try "up --help")\n' "$1" >&2 + exit 2 + ;; + esac + shift + done +} + +# Pre-scan for --profile so the profile file can set defaults BEFORE the +# explicit CLI flags parsed by args_parse take effect (CLI wins). +args_prescan_profile() { + local i argv=("$@") + for (( i=0; i<${#argv[@]}; i++ )); do + case "${argv[i]}" in + --profile=*) PROFILE_PRELOAD="${argv[i]#*=}"; return ;; + --profile) PROFILE_PRELOAD="${argv[i+1]:-}"; return ;; + esac + done + PROFILE_PRELOAD="" +} diff --git a/src/lib/changelog.sh b/src/lib/changelog.sh new file mode 100644 index 0000000..0a3112e --- /dev/null +++ b/src/lib/changelog.sh @@ -0,0 +1,36 @@ +#!/usr/bin/env bash +# Fetch recent changelog for a package using the installed manager. + +changelog_show() { + local pkg="$1" + if [[ -z $pkg ]]; then + ui_err "usage: up --changelog " + return 2 + fi + ui_title "Changelog: $pkg" + if sys_has apt && apt changelog "$pkg" 2>/dev/null | head -n 60 | grep -q .; then + apt changelog "$pkg" 2>/dev/null | head -n 60 + return 0 + fi + if sys_has dnf; then + if dnf changelog "$pkg" 2>/dev/null | grep -q .; then + dnf changelog "$pkg" 2>/dev/null | head -n 60 + return 0 + fi + if dnf updateinfo info "$pkg" 2>/dev/null | grep -q .; then + dnf updateinfo info "$pkg" 2>/dev/null | head -n 60 + return 0 + fi + fi + if sys_has pacman; then + pacman -Qi "$pkg" 2>/dev/null || pacman -Si "$pkg" 2>/dev/null + ui_muted "(pacman has no native changelog; see https://archlinux.org/packages/)" + return 0 + fi + if sys_has brew; then + brew log --oneline -n 20 "$pkg" 2>/dev/null || brew info "$pkg" + return 0 + fi + ui_err "No supported package manager with changelog info found." + return 1 +} diff --git a/src/lib/clean.sh b/src/lib/clean.sh new file mode 100644 index 0000000..954a3e9 --- /dev/null +++ b/src/lib/clean.sh @@ -0,0 +1,70 @@ +#!/usr/bin/env bash +# Cache and trash cleaners. Safe-by-default: prompt unless -y. + +_clean_size_kb() { + [[ -d "$1" ]] || { echo 0; return; } + du -sk "$1" 2>/dev/null | awk '{print $1}' +} + +_clean_confirm() { + local prompt="$1" + if (( ARG_YES )); then echo y; return; fi + local ans + read -r -p " $prompt [y/N]: " ans || ans=n + printf '%s' "$ans" +} + +clean_cache() { + local target="$HOME/.cache" + ui_title "User cache" + if [[ ! -d $target ]]; then + ui_ok "empty"; return 0 + fi + local size; size=$(du -sh "$target" 2>/dev/null | cut -f1) + ui_muted "$target ($size)" + local ans; ans=$(_clean_confirm "Clean user cache?") + if [[ $ans == [yY]* ]]; then + local before; before=$(_clean_size_kb "$target") + if (( DRY_RUN )); then + ui_sub "[dry-run] would remove contents of $target" + else + find "$target" -mindepth 1 -maxdepth 1 -exec rm -rf -- {} + 2>/dev/null || true + fi + local after; after=$(_clean_size_kb "$target") + SUMMARY_FREED=$(( SUMMARY_FREED + before - after )) + ui_ok "cache cleaned" + else + ui_muted "skipped" + fi +} + +clean_trash() { + local files="$HOME/.local/share/Trash/files" + local info="$HOME/.local/share/Trash/info" + ui_title "Trash" + if [[ ! -d $files ]]; then + ui_ok "empty"; return 0 + fi + local count + count=$(find "$files" -mindepth 1 -maxdepth 1 2>/dev/null | wc -l) + if (( count == 0 )); then + ui_ok "empty"; return 0 + fi + local size; size=$(du -sh "$files" 2>/dev/null | cut -f1) + ui_muted "$files ($size, $count items)" + local ans; ans=$(_clean_confirm "Empty trash?") + if [[ $ans == [yY]* ]]; then + local before; before=$(_clean_size_kb "$files") + if (( DRY_RUN )); then + ui_sub "[dry-run] would empty trash" + else + find "$files" -mindepth 1 -maxdepth 1 -exec rm -rf -- {} + 2>/dev/null || true + [[ -d $info ]] && find "$info" -mindepth 1 -maxdepth 1 -exec rm -rf -- {} + 2>/dev/null || true + fi + local after; after=$(_clean_size_kb "$files") + SUMMARY_FREED=$(( SUMMARY_FREED + before - after )) + ui_ok "trash emptied" + else + ui_muted "skipped" + fi +} diff --git a/src/lib/diff.sh b/src/lib/diff.sh new file mode 100644 index 0000000..010ca32 --- /dev/null +++ b/src/lib/diff.sh @@ -0,0 +1,83 @@ +#!/usr/bin/env bash +# Snapshot installed packages before/after; compute diff on demand. + +: "${DIFF_BEFORE:=$EMERGER_STATE/pkgs.before}" +: "${DIFF_AFTER:=$EMERGER_STATE/pkgs.after}" +: "${DIFF_LAST:=$EMERGER_STATE/pkgs.diff}" + +diff_snapshot() { + local out="$1" + : >"$out" + if sys_has dpkg-query; then + dpkg-query -W -f='apt\t${Package}\t${Version}\n' 2>/dev/null >>"$out" + fi + if sys_has pacman; then + pacman -Q 2>/dev/null | awk '{print "pacman\t"$1"\t"$2}' >>"$out" + fi + if sys_has rpm; then + rpm -qa --qf 'rpm\t%{NAME}\t%{VERSION}-%{RELEASE}\n' 2>/dev/null >>"$out" + fi + if sys_has flatpak; then + flatpak list --columns=application,version 2>/dev/null | awk -F'\t' 'NR>1 || tolower($1) !~ /^application$/ {if ($1!="") print "flatpak\t"$1"\t"$2}' >>"$out" + fi + if sys_has snap; then + snap list 2>/dev/null | tail -n +2 | awk '{print "snap\t"$1"\t"$2}' >>"$out" + fi + if sys_has brew; then + brew list --versions 2>/dev/null | awk '{print "brew\t"$1"\t"$2}' >>"$out" + fi + sort -o "$out" "$out" 2>/dev/null || true +} + +diff_compute() { + local before="$1" after="$2" out="$3" + : >"$out" + [[ -f $before && -f $after ]] || return 0 + trap 'rm -f "${out}.a" "${out}.b"' RETURN + # Build maps by "mgr\tname" -> version + awk -F'\t' '{print $1"\t"$2"\t"$3}' "$before" | sort -u >"${out}.b" + awk -F'\t' '{print $1"\t"$2"\t"$3}' "$after" | sort -u >"${out}.a" + # added + comm -13 <(awk -F'\t' '{print $1"\t"$2}' "${out}.b") <(awk -F'\t' '{print $1"\t"$2}' "${out}.a") | while IFS=$'\t' read -r mgr name; do + local v; v=$(awk -F'\t' -v m="$mgr" -v n="$name" '$1==m&&$2==n{print $3; exit}' "${out}.a") + printf '+\t%s\t%s\t%s\n' "$mgr" "$name" "$v" >>"$out" + done + # removed + comm -23 <(awk -F'\t' '{print $1"\t"$2}' "${out}.b") <(awk -F'\t' '{print $1"\t"$2}' "${out}.a") | while IFS=$'\t' read -r mgr name; do + local v; v=$(awk -F'\t' -v m="$mgr" -v n="$name" '$1==m&&$2==n{print $3; exit}' "${out}.b") + printf -- '-\t%s\t%s\t%s\n' "$mgr" "$name" "$v" >>"$out" + done + # upgraded: same mgr+name, different version + join -t$'\t' -j1 <(awk -F'\t' '{print $1"_"$2"\t"$3}' "${out}.b" | sort) \ + <(awk -F'\t' '{print $1"_"$2"\t"$3}' "${out}.a" | sort) \ + | awk -F'\t' '$2!=$3{split($1,x,"_"); print "~\t"x[1]"\t"x[2]"\t"$2" -> "$3}' >>"$out" + rm -f "${out}.a" "${out}.b" +} + +diff_show() { + local f="${1:-$DIFF_LAST}" + if [[ ! -s $f ]]; then + ui_muted "No package changes recorded." + return + fi + ui_title "Package changes" + local added removed upgraded + added=$(grep -c '^+' "$f" || true) + removed=$(grep -c '^-' "$f" || true) + upgraded=$(grep -c '^~' "$f" || true) + printf ' %s+%s %d added %s-%s %d removed %s~%s %d upgraded\n\n' \ + "$C_GREEN" "$C_RESET" "${added:-0}" \ + "$C_RED" "$C_RESET" "${removed:-0}" \ + "$C_YELLOW" "$C_RESET" "${upgraded:-0}" + awk -F'\t' ' + $1=="~"{printf " \033[33m~\033[0m %-10s %-30s %s\n", $2, $3, $4} + $1=="+"{printf " \033[32m+\033[0m %-10s %-30s %s\n", $2, $3, $4} + $1=="-"{printf " \033[31m-\033[0m %-10s %-30s %s\n", $2, $3, $4} + ' "$f" +} + +diff_count_changed() { + local f="${1:-$DIFF_LAST}" + [[ -s $f ]] || { echo 0; return; } + wc -l <"$f" +} diff --git a/src/lib/disk.sh b/src/lib/disk.sh new file mode 100644 index 0000000..d9fc705 --- /dev/null +++ b/src/lib/disk.sh @@ -0,0 +1,24 @@ +#!/usr/bin/env bash +# Disk-space precheck: warn/abort if the update target is tight. + +: "${DISK_MIN_FREE_MB:=1024}" + +disk_free_mb() { + local path="${1:-/}" + df -Pm "$path" 2>/dev/null | awk 'NR==2{print $4}' +} + +disk_precheck() { + local free; free=$(disk_free_mb /) + [[ -z $free ]] && return 0 + if (( free < DISK_MIN_FREE_MB )); then + ui_warn "Low disk space on / (${free}MB free, threshold ${DISK_MIN_FREE_MB}MB)." + if (( ARG_YES == 0 )); then + local ans + read -r -p " Continue anyway? [y/N]: " ans || ans=n + [[ $ans == [yY]* ]] || { ui_muted "Aborted by user."; exit 1; } + fi + else + log_info "disk precheck ok: ${free}MB free on /" + fi +} diff --git a/src/lib/doctor.sh b/src/lib/doctor.sh new file mode 100644 index 0000000..5f384d4 --- /dev/null +++ b/src/lib/doctor.sh @@ -0,0 +1,109 @@ +#!/usr/bin/env bash +# Health check: run `up --doctor` and see what's wrong with the environment. + +_doctor_issue=0 + +_dok() { ui_ok "$*"; } +_dwarn() { ui_warn "$*"; _doctor_issue=$((_doctor_issue+1)); } +_derr() { ui_err "$*"; _doctor_issue=$((_doctor_issue+1)); } + +doctor_run() { + _doctor_issue=0 + ui_title "eMerger doctor" + + # Shell/env + if [[ -n $BASH_VERSION ]]; then + _dok "bash $BASH_VERSION" + else + _dwarn "running outside bash" + fi + + # sudo + if sys_is_root; then + _dok "running as root" + elif sudo -n true 2>/dev/null; then + _dok "sudo cached" + else + ui_info "sudo: will prompt when needed" + fi + + # Disk + local free_mb; free_mb=$(df -Pm / | awk 'NR==2{print $4}') + if [[ -n $free_mb ]] && (( free_mb < 1024 )); then + _dwarn "low disk space on / (${free_mb}MB free)" + else + _dok "disk: ${free_mb:-?}MB free on /" + fi + + # Network + if sys_has curl && curl -fsS --max-time 4 -o /dev/null https://github.com 2>/dev/null; then + _dok "network: reachable" + elif sys_has curl; then + _dwarn "network: github.com unreachable" + fi + + # State dir writable + if [[ -w $EMERGER_STATE ]] || mkdir -p "$EMERGER_STATE" 2>/dev/null; then + _dok "state: $EMERGER_STATE writable" + else + _derr "state not writable: $EMERGER_STATE" + fi + + # Package manager health + local mgr + for mgr in "${PKG_MANAGERS[@]}"; do + pkg_detect "$mgr" || continue + _doctor_pkg "$mgr" + done + + # Reboot flag + reboot_check + if (( REBOOT_NEEDED )); then + ui_warn "reboot pending ($REBOOT_REASON)" + fi + + ui_hr + if (( _doctor_issue == 0 )); then + _dok "all clear" + return 0 + fi + ui_warn "$_doctor_issue issue(s) found" + return 1 +} + +_doctor_pkg() { + local m="$1" + case "$m" in + apt) + if ! dpkg --audit 2>/dev/null | grep -q .; then + _dok "apt: dpkg --audit clean" + else + _dwarn "apt: dpkg --audit reports issues" + fi + ;; + pacman) + if pacman -Dk >/dev/null 2>&1; then + _dok "pacman: database ok" + else + _dwarn "pacman: database has issues (pacman -Dk)" + fi + ;; + dnf|yum) + if "$m" check --quiet >/dev/null 2>&1; then + _dok "$m: check ok" + else + ui_info "$m: check not available or ran clean" + fi + ;; + brew) + if brew doctor >/dev/null 2>&1; then + _dok "brew: doctor ok" + else + _dwarn "brew: doctor reports issues" + fi + ;; + *) + _dok "$m: detected" + ;; + esac +} diff --git a/src/lib/estimate.sh b/src/lib/estimate.sh new file mode 100644 index 0000000..360a254 --- /dev/null +++ b/src/lib/estimate.sh @@ -0,0 +1,21 @@ +#!/usr/bin/env bash +# Estimate step duration based on recent history.jsonl entries. + +estimate_for() { + local mgr="$1" + local hist="$EMERGER_STATE/history.jsonl" + [[ -f $hist ]] || { printf ''; return; } + # Crude: average run duration over last 5 runs that included this manager. + tail -n 20 "$hist" 2>/dev/null | awk -v m="\"$mgr\"" ' + index($0, m) > 0 { + match($0, /"duration":[0-9]+/) + if (RLENGTH > 0) { + d = substr($0, RSTART+11, RLENGTH-11) + sum += d; n += 1 + } + } + END { + if (n > 0) printf "~%ds", int(sum/n) + } + ' +} diff --git a/src/lib/help.txt b/src/lib/help.txt new file mode 100644 index 0000000..a134cc0 --- /dev/null +++ b/src/lib/help.txt @@ -0,0 +1,95 @@ +eMerger - one-command system updater + +USAGE + up [options] + +GENERAL + -h, --help Show this help + -V, --version Show version + -i, --interactive Interactive menu (gum / whiptail / plain) + --doctor Run environment health check + +EXECUTION + -n, --dry-run Show what would be done, do nothing + -v, --verbose Stream package manager output live + -q, --quiet Quieter output (repeat for more: -q, -qq, -qqq) + -y, --yes Assume "yes" on prompts + --json Machine-readable run summary on stdout + Short single-letter flags bundle: -nv == -n -v, -ynv == -y -n -v + +SELECTION + --security Only security updates when supported + --firmware Include firmware via fwupdmgr + --no-firmware Force-skip firmware + --dev Include dev toolchains (rustup, cargo, npm, pip, gem) + --parallel Run independent user-space managers in parallel + --profile NAME Load a profile from profiles.d/.sh + --list-profiles List available profiles + --only LIST Comma-separated managers to keep (e.g. apt,flatpak) + --except LIST Comma-separated managers to skip + +SAFETY / INTEGRATION + --snapshot Take a pre-update snapshot (snapper/timeshift/btrfs) + --rollback Revert to the latest eMerger snapshot and exit + --refresh-mirrors Rank/refresh mirrors (reflector, netselect-apt) + --resume Skip managers that completed in the last interrupted run + --reboot Reboot now if the system requires it + --reboot-exit Exit 4 instead of 0 when a reboot is required + --download-only Download packages but do not install (apt/dnf/pacman/zypper) + --offline Alias for --download-only + +DISPLAY + -nl, --no-logo Hide logo + -ni, --no-info Hide system info line + -nc, --no-cache Skip user cache cleaning + -nt, --no-trash Skip trash cleaning + -w, --weather Show weather line via wttr.in + --no-emoji Force ASCII glyphs only + +INSPECTION + --changed Show packages added/removed/upgraded in the last run + --changelog PKG Show upstream changelog for PKG + --history Show the last runs + --report [FILE] Export the last report to Markdown + --metrics FILE Export last run as Prometheus textfile + -err, --errors Show logged errors + +MAINTENANCE + -up, --self-update Update eMerger itself via git (fast-forward) + -au, --auto-update Install weekly auto-update (systemd timer or cron) + -rc, --rebuild-cache Clear detection cache + +EXAMPLES + up # normal update + up -nv # preview + live stream (short bundle) + up --security -y # unattended security updates + up --dev --firmware # full refresh + toolchains + firmware + up --snapshot --refresh-mirrors -y + up --only apt,flatpak # limit to specific managers + up --except snap,firmware # run everything else + up --download-only -y # prefetch while online, install later + up --rollback # revert the last pre-update snapshot + up --json | jq . # consume in scripts / CI + up --metrics /var/lib/node_exporter/textfile_collector/emerger.prom + up --reboot-exit # exit 4 if a reboot is pending + +CONFIG + ~/.config/emerger/config.sh Sourced before argument parsing + ~/.config/emerger/profiles.d/*.sh User profiles + ~/.config/emerger/hooks/pre.d/*.sh Pre-update hooks + ~/.config/emerger/hooks/post.d/*.sh Post-update hooks + ~/.config/emerger/managers.d/*.sh Third-party package manager plugins + ~/.config/emerger/ignore.list Packages to never upgrade (pacman native) + EMERGER_CACHE_TTL Detection cache TTL in seconds (default 86400, 0 disables) + +STATE + ~/.local/state/emerger/emerger.log Log + ~/.local/state/emerger/history.jsonl Run history (one JSON per line) + ~/.local/state/emerger/pkgs.diff Last run package diff + +EXIT CODES + 0 success + 1 runtime failure (e.g. sudo, disk, lock) + 2 argument parsing error + 3 one or more package managers failed (script itself ran to completion) + 4 reboot required (only with --reboot-exit) diff --git a/src/lib/hooks.sh b/src/lib/hooks.sh new file mode 100644 index 0000000..f31aace --- /dev/null +++ b/src/lib/hooks.sh @@ -0,0 +1,20 @@ +#!/usr/bin/env bash +# Run user hook scripts from $EMERGER_CONFIG/hooks/{pre,post}.d/*.sh + +hooks_run() { + local phase="$1" + local dir="$EMERGER_CONFIG/hooks/${phase}.d" + [[ -d $dir ]] || return 0 + local h ran=0 + for h in "$dir"/*.sh; do + [[ -f $h ]] || continue + (( ran == 0 )) && ui_title "Hooks ($phase)" + ran=1 + ui_sub "$(basename "$h")" + if (( DRY_RUN )); then continue; fi + if ! bash "$h"; then + ui_warn "hook $(basename "$h") failed" + log_warn "hook $phase/$h failed" + fi + done +} diff --git a/src/lib/ignore.sh b/src/lib/ignore.sh new file mode 100644 index 0000000..bad1f7b --- /dev/null +++ b/src/lib/ignore.sh @@ -0,0 +1,33 @@ +#!/usr/bin/env bash +# Ignore list: packages that should never be upgraded. +# File: $EMERGER_CONFIG/ignore.list (one pattern per line, # comments allowed) +# Native support: pacman (--ignore). Others: advisory only. + +: "${IGNORE_FILE:=$EMERGER_CONFIG/ignore.list}" +IGNORE_LIST=() + +ignore_load() { + IGNORE_LIST=() + [[ -f $IGNORE_FILE ]] || return 0 + local line + while IFS= read -r line; do + line="${line%%#*}" + line="${line//[[:space:]]/}" + [[ -z $line ]] && continue + IGNORE_LIST+=("$line") + done <"$IGNORE_FILE" +} + +ignore_pacman_flag() { + (( ${#IGNORE_LIST[@]} == 0 )) && return + local joined; joined=$(IFS=,; printf '%s' "${IGNORE_LIST[*]}") + printf -- '--ignore=%s' "$joined" +} + +ignore_advisory() { + (( ${#IGNORE_LIST[@]} == 0 )) && return 0 + ui_muted "Ignore list: ${IGNORE_LIST[*]}" + if ! sys_has pacman; then + ui_muted "(only pacman honors --ignore natively; hold the rest via apt-mark/dnf versionlock)" + fi +} diff --git a/src/lib/lock.sh b/src/lib/lock.sh new file mode 100644 index 0000000..9d531eb --- /dev/null +++ b/src/lib/lock.sh @@ -0,0 +1,22 @@ +#!/usr/bin/env bash +# Global lock: prevent two concurrent eMerger runs from stepping on each other. + +: "${EMERGER_LOCK:=${XDG_RUNTIME_DIR:-${EMERGER_STATE:-${XDG_STATE_HOME:-$HOME/.local/state}/emerger}}/emerger.lock}" + +lock_acquire() { + exec 9>"$EMERGER_LOCK" 2>/dev/null || return 0 + if ! command -v flock >/dev/null 2>&1; then + return 0 + fi + if ! flock -n 9; then + ui_err "Another eMerger run is in progress (lock: $EMERGER_LOCK)." + ui_muted "Wait for it, or remove the lock file if you're sure it's stale." + return 1 + fi + printf '%d\n' "$$" >&9 + return 0 +} + +lock_release() { + exec 9>&- 2>/dev/null || true +} diff --git a/src/lib/log.sh b/src/lib/log.sh new file mode 100644 index 0000000..0fc4c19 --- /dev/null +++ b/src/lib/log.sh @@ -0,0 +1,21 @@ +#!/usr/bin/env bash +# Structured logging to $EMERGER_LOG. + +: "${EMERGER_STATE:=${XDG_STATE_HOME:-$HOME/.local/state}/emerger}" +: "${EMERGER_LOG:=$EMERGER_STATE/emerger.log}" + +log_init() { + mkdir -p "$(dirname "$EMERGER_LOG")" + touch "$EMERGER_LOG" + if [[ $(wc -l <"$EMERGER_LOG" 2>/dev/null || echo 0) -gt 2000 ]]; then + tail -n 2000 "$EMERGER_LOG" >"${EMERGER_LOG}.tmp" && mv "${EMERGER_LOG}.tmp" "$EMERGER_LOG" + fi +} + +_log() { + local level="$1"; shift + printf '%s|%s|%s\n' "$(date -u '+%Y-%m-%dT%H:%M:%SZ')" "$level" "$*" >>"$EMERGER_LOG" 2>/dev/null || true +} +log_info() { _log INFO "$@"; } +log_warn() { _log WARN "$@"; } +log_error() { _log ERROR "$@"; } diff --git a/src/lib/metrics.sh b/src/lib/metrics.sh new file mode 100644 index 0000000..6f93c92 --- /dev/null +++ b/src/lib/metrics.sh @@ -0,0 +1,62 @@ +#!/usr/bin/env bash +# Prometheus textfile-collector export. +# Reads the most recent entry of history.jsonl and renders a .prom file. + +metrics_export() { + local out="$1" + local hist="$EMERGER_STATE/history.jsonl" + if [[ ! -f $hist ]]; then + ui_err "No history yet ($hist missing)" + return 1 + fi + local last + last=$(tail -n 1 "$hist") + [[ -z $last ]] && { ui_err "history.jsonl is empty"; return 1; } + + local ts dur freed errs reboot + ts=$(printf '%s' "$last" | sed -n 's/.*"ts":"\([^"]*\)".*/\1/p') + dur=$(printf '%s' "$last" | sed -n 's/.*"duration":\([0-9]*\).*/\1/p') + freed=$(printf '%s' "$last" | sed -n 's/.*"freed_kb":\([0-9]*\).*/\1/p') + errs=$(printf '%s' "$last" | sed -n 's/.*"errors":\([0-9]*\).*/\1/p') + reboot=$(printf '%s' "$last" | sed -n 's/.*"reboot":\([0-9]*\).*/\1/p') + + # epoch (best-effort, GNU date syntax). + local epoch=0 + if [[ -n $ts ]]; then + epoch=$(date -d "$ts" +%s 2>/dev/null || echo 0) + fi + + local tmp="$out.tmp.$$" + { + printf '# HELP emerger_last_run_timestamp_seconds Unix timestamp of the last eMerger run\n' + printf '# TYPE emerger_last_run_timestamp_seconds gauge\n' + printf 'emerger_last_run_timestamp_seconds %s\n' "${epoch:-0}" + printf '# HELP emerger_last_run_duration_seconds Duration of the last run\n' + printf '# TYPE emerger_last_run_duration_seconds gauge\n' + printf 'emerger_last_run_duration_seconds %s\n' "${dur:-0}" + printf '# HELP emerger_last_run_freed_bytes Bytes freed by the last run\n' + printf '# TYPE emerger_last_run_freed_bytes gauge\n' + printf 'emerger_last_run_freed_bytes %s\n' "$(( ${freed:-0} * 1024 ))" + printf '# HELP emerger_last_run_errors Manager failures in the last run\n' + printf '# TYPE emerger_last_run_errors gauge\n' + printf 'emerger_last_run_errors %s\n' "${errs:-0}" + printf '# HELP emerger_reboot_required Whether a reboot is pending (0/1)\n' + printf '# TYPE emerger_reboot_required gauge\n' + printf 'emerger_reboot_required %s\n' "${reboot:-0}" + + # Per-manager success flag. + printf '# HELP emerger_manager_ok Per-manager success in the last run (1=ok,0=fail)\n' + printf '# TYPE emerger_manager_ok gauge\n' + printf '%s\n' "$last" | grep -oE '"name":"[^"]*","result":"[^"]*"' | \ + while IFS= read -r pair; do + local name result val + name=$(printf '%s' "$pair" | sed -n 's/.*"name":"\([^"]*\)".*/\1/p') + result=$(printf '%s' "$pair" | sed -n 's/.*"result":"\([^"]*\)".*/\1/p') + val=0 + [[ $result == ok ]] && val=1 + printf 'emerger_manager_ok{manager="%s"} %s\n' "$name" "$val" + done + } >"$tmp" + mv "$tmp" "$out" + ui_ok "metrics written to $out" +} diff --git a/src/lib/mirrors.sh b/src/lib/mirrors.sh new file mode 100644 index 0000000..a2d1bd3 --- /dev/null +++ b/src/lib/mirrors.sh @@ -0,0 +1,33 @@ +#!/usr/bin/env bash +# Rank / refresh package mirrors where supported. + +mirrors_refresh() { + ui_title "Refresh mirrors" + if (( DRY_RUN )); then + ui_sub "[dry-run] would refresh mirrors" + return 0 + fi + local did=0 + if sys_has reflector; then + if sudo reflector --latest 20 --sort rate --protocol https --save /etc/pacman.d/mirrorlist >/dev/null 2>&1; then + ui_ok "reflector: pacman mirrorlist updated" + did=1 + else + ui_warn "reflector failed" + fi + fi + if sys_has netselect-apt; then + local tmp; tmp=$(mktemp -t emerger.XXXXXX) + trap 'rm -f "$tmp"' RETURN + if sudo netselect-apt -o "$tmp" >/dev/null 2>&1 && [[ -s $tmp ]]; then + sudo install -m 0644 "$tmp" /etc/apt/sources.list.d/netselect.list + ui_ok "netselect-apt: wrote /etc/apt/sources.list.d/netselect.list" + did=1 + fi + rm -f "$tmp" + fi + if sys_has dnf && dnf config-manager --help >/dev/null 2>&1; then + ui_muted "dnf: fastestmirror plugin handles this automatically when enabled" + fi + (( did )) || ui_muted "No mirror tool available; install 'reflector' (arch) or 'netselect-apt' (debian)." +} diff --git a/src/lib/notify.sh b/src/lib/notify.sh new file mode 100644 index 0000000..2aaf1f2 --- /dev/null +++ b/src/lib/notify.sh @@ -0,0 +1,15 @@ +#!/usr/bin/env bash +# Optional desktop notification at end of run. + +notify_send_result() { + sys_has notify-send || return 0 + [[ -n ${DISPLAY:-} || -n ${WAYLAND_DISPLAY:-} ]] || return 0 + local msg urgency=normal icon=emblem-default + if (( SUMMARY_ERRORS > 0 )); then + urgency=critical; icon=dialog-error + msg="Finished with $SUMMARY_ERRORS error(s)." + else + msg="${#SUMMARY_MANAGERS[@]} manager(s) updated." + fi + notify-send -a eMerger -u "$urgency" -i "$icon" "eMerger" "$msg" 2>/dev/null || true +} diff --git a/src/lib/packages.sh b/src/lib/packages.sh new file mode 100644 index 0000000..641136f --- /dev/null +++ b/src/lib/packages.sh @@ -0,0 +1,337 @@ +#!/usr/bin/env bash +# Package manager registry and dispatcher. +# Detection is cached in $EMERGER_CACHE/detected for speed. + +PKG_MANAGERS=( + pacman yay paru + apt dnf yum zypper xbps apk eopkg emerge nix + softwareupdate brew mas + fwupd + flatpak snap + rustup cargo npm pnpm pip gem +) + +pkg_needs_sudo() { + case "$1" in + pacman|apt|dnf|yum|zypper|xbps|apk|eopkg|emerge|fwupd|snap|softwareupdate) return 0 ;; + nix) sys_has nixos-rebuild ;; + *) + if declare -F plugin_is >/dev/null && plugin_is "$1"; then + plugin_needs_sudo "$1" + else + return 1 + fi + ;; + esac +} + +pkg_is_dev() { + case "$1" in + rustup|cargo|npm|pnpm|pip|gem) return 0 ;; + *) + if declare -F plugin_is >/dev/null && plugin_is "$1"; then + plugin_is_dev "$1" + else + return 1 + fi + ;; + esac +} + +pkg_is_parallelizable() { + case "$1" in + flatpak|snap|brew|mas|rustup|cargo|npm|pnpm|pip|gem) return 0 ;; + *) + if declare -F plugin_is >/dev/null && plugin_is "$1"; then + plugin_is_parallel "$1" + else + return 1 + fi + ;; + esac +} + +# Cache TTL in seconds for the per-manager detection cache. +# Override with EMERGER_CACHE_TTL (0 disables caching). +: "${EMERGER_CACHE_TTL:=86400}" + +_pkg_detect_raw() { + case "$1" in + pacman) sys_has pacman ;; + apt) sys_has apt || sys_has apt-get ;; + dnf) sys_has dnf ;; + yum) sys_has yum && ! sys_has dnf ;; + zypper) sys_has zypper ;; + xbps) sys_has xbps-install ;; + apk) sys_has apk ;; + eopkg) sys_has eopkg ;; + emerge) sys_has emerge ;; + nix) sys_has nixos-rebuild || sys_has nix-env ;; + brew) sys_has brew ;; + mas) sys_has mas ;; + softwareupdate) + [[ $(uname -s) == Darwin ]] && sys_has softwareupdate ;; + flatpak) sys_has flatpak ;; + snap) sys_has snap ;; + yay) sys_has yay ;; + paru) sys_has paru ;; + fwupd) sys_has fwupdmgr ;; + rustup) sys_has rustup ;; + cargo) sys_has cargo && cargo install-update --version >/dev/null 2>&1 ;; + npm) sys_has npm ;; + pnpm) sys_has pnpm ;; + pip) sys_has pip || sys_has pip3 ;; + gem) sys_has gem ;; + *) return 1 ;; + esac +} + +_pkg_cache_fresh() { + local cache="$1" + (( EMERGER_CACHE_TTL <= 0 )) && return 1 + [[ -f $cache ]] || return 1 + local now mtime age + now=$(date +%s) + mtime=$(stat -c %Y "$cache" 2>/dev/null || stat -f %m "$cache" 2>/dev/null || echo 0) + age=$(( now - mtime )) + (( age < EMERGER_CACHE_TTL )) +} + +pkg_detect() { + local m="$1" cache="${EMERGER_CACHE:-}/detected" + if _pkg_cache_fresh "$cache"; then + grep -q "^$m\$" "$cache" && return 0 + grep -q "^!$m\$" "$cache" && return 1 + fi + local rc + if declare -F plugin_is >/dev/null && plugin_is "$m"; then + plugin_detect "$m"; rc=$? + else + _pkg_detect_raw "$m"; rc=$? + fi + if (( rc == 0 )); then + [[ -n ${EMERGER_CACHE:-} ]] && printf '%s\n' "$m" >>"$cache" 2>/dev/null + return 0 + else + [[ -n ${EMERGER_CACHE:-} ]] && printf '!%s\n' "$m" >>"$cache" 2>/dev/null + return 1 + fi +} + +pkg_icon() { + if (( UI_UNICODE )); then + case "$1" in + pacman|yay|paru) printf '\xf0\x9f\x8f\xb9' ;; + apt) printf '\xf0\x9f\x8c\x80' ;; + dnf|yum) printf '\xf0\x9f\xa4\xa0' ;; + zypper) printf '\xf0\x9f\xa6\x8e' ;; + apk) printf '\xe2\x9b\xb0' ;; + xbps) printf '\xf0\x9f\x95\xb3' ;; + emerge) printf '\xf0\x9f\x90\xa7' ;; + nix) printf '\xe2\x9d\x84' ;; + brew) printf '\xf0\x9f\x8d\xba' ;; + mas) printf '\xef\xa3\xbf' ;; + softwareupdate) printf '\xef\xa3\xbf' ;; + flatpak) printf '\xf0\x9f\x93\xa6' ;; + snap) printf '\xf0\x9f\x90\xa2' ;; + eopkg) printf '\xf0\x9f\xa7\xb1' ;; + fwupd) printf '\xf0\x9f\x94\xa7' ;; + rustup|cargo) printf '\xf0\x9f\xa6\x80' ;; + npm|pnpm) printf '\xf0\x9f\x93\x97' ;; + pip) printf '\xf0\x9f\x90\x8d' ;; + gem) printf '\xf0\x9f\x92\x8e' ;; + *) + if declare -F plugin_is >/dev/null && plugin_is "$1"; then + plugin_icon "$1" + else + printf '%s' "$(ui_glyph bullet)" + fi + ;; + esac + else + printf '%s' "$(ui_glyph bullet)" + fi +} + +pkg_run() { + local mgr="$1" sudo_cmd="" rc=0 + _PKG_CURRENT="$mgr" + if pkg_needs_sudo "$mgr"; then sudo_cmd="sudo"; fi + + local ic est + ic=$(pkg_icon "$mgr") + est=$(estimate_for "$mgr") + ui_title "$ic $mgr${est:+ $est}" + log_info "starting $mgr" + + # Route to plugin if registered. + if declare -F plugin_is >/dev/null && plugin_is "$mgr"; then + plugin_run "$mgr"; rc=$? + _PKG_CURRENT="" + (( rc == 0 )) && log_info "$mgr: ok" || log_error "$mgr: rc=$rc" + return $rc + fi + + # Pacman can natively honor an ignore list. + local pacman_ignore="" + sys_has pacman && pacman_ignore=$(ignore_pacman_flag) + + case "$mgr" in + pacman) + # shellcheck disable=SC2086 + run_cmd "refresh databases" $sudo_cmd pacman -Syy --noconfirm $pacman_ignore || rc=$? + if (( ARG_DOWNLOAD_ONLY )); then + # shellcheck disable=SC2086 + run_cmd "download only" $sudo_cmd pacman -Syuw --noconfirm $pacman_ignore || rc=$? + else + # shellcheck disable=SC2086 + run_cmd "upgrade system" $sudo_cmd pacman -Syu --noconfirm $pacman_ignore || rc=$? + if sys_has paccache; then + run_cmd "clean package cache" $sudo_cmd paccache -rk2 || true + fi + fi + ;; + apt) + local apt_bin=apt-get + sys_has apt && apt_bin=apt + run_cmd "fix broken" $sudo_cmd "$apt_bin" --fix-broken install -y || rc=$? + run_cmd "update" $sudo_cmd "$apt_bin" update || rc=$? + if (( ARG_DOWNLOAD_ONLY )); then + local upflag=full-upgrade + [[ $apt_bin == apt-get ]] && upflag=dist-upgrade + run_cmd "$upflag --download-only" $sudo_cmd "$apt_bin" "$upflag" -y --download-only || rc=$? + else + if (( ARG_SECURITY )) && sys_has unattended-upgrade; then + run_cmd "security upgrade" $sudo_cmd unattended-upgrade -v || rc=$? + else + local upflag=full-upgrade + [[ $apt_bin == apt-get ]] && upflag=dist-upgrade + run_cmd "$upflag" $sudo_cmd "$apt_bin" "$upflag" -y || rc=$? + fi + run_cmd "autoremove" $sudo_cmd "$apt_bin" autoremove -y || rc=$? + run_cmd "autoclean" $sudo_cmd "$apt_bin" autoclean -y || rc=$? + run_cmd "clean" $sudo_cmd "$apt_bin" clean || rc=$? + fi + ;; + dnf) + local sec="" + (( ARG_SECURITY )) && sec="--security" + if (( ARG_DOWNLOAD_ONLY )); then + run_cmd "download only" $sudo_cmd dnf upgrade -y --downloadonly $sec || rc=$? + else + run_cmd "upgrade" $sudo_cmd dnf upgrade -y $sec || rc=$? + run_cmd "autoremove" $sudo_cmd dnf autoremove -y || rc=$? + run_cmd "clean all" $sudo_cmd dnf clean all || rc=$? + fi + ;; + yum) + run_cmd "update" $sudo_cmd yum update -y || rc=$? + run_cmd "clean all" $sudo_cmd yum clean all || rc=$? + ;; + zypper) + run_cmd "refresh" $sudo_cmd zypper --non-interactive refresh || rc=$? + if (( ARG_DOWNLOAD_ONLY )); then + run_cmd "download only" $sudo_cmd zypper --non-interactive update --download-only || rc=$? + elif (( ARG_SECURITY )); then + run_cmd "security patch" $sudo_cmd zypper --non-interactive patch --category security || rc=$? + else + run_cmd "update" $sudo_cmd zypper --non-interactive update || rc=$? + fi + run_cmd "clean" $sudo_cmd zypper clean || true + ;; + xbps) + run_cmd "sync & upgrade" $sudo_cmd xbps-install -Suy || rc=$? + run_cmd "remove orphans" $sudo_cmd xbps-remove -Oy || true + ;; + apk) + run_cmd "update" $sudo_cmd apk update || rc=$? + run_cmd "upgrade" $sudo_cmd apk upgrade || rc=$? + run_cmd "clean cache" $sudo_cmd apk cache clean || true + ;; + eopkg) + run_cmd "upgrade" $sudo_cmd eopkg upgrade -y || rc=$? + run_cmd "delete cache" $sudo_cmd eopkg delete-cache || true + ;; + emerge) + run_cmd "sync" $sudo_cmd emerge --sync --quiet || rc=$? + run_cmd "update world" $sudo_cmd emerge -uDN --quiet @world || rc=$? + run_cmd "depclean" $sudo_cmd emerge --depclean --quiet || true + ;; + nix) + if sys_has nixos-rebuild; then + run_cmd "nixos-rebuild switch --upgrade" $sudo_cmd nixos-rebuild switch --upgrade || rc=$? + run_cmd "collect garbage" $sudo_cmd nix-collect-garbage -d || true + else + run_cmd "channel update" nix-channel --update || rc=$? + run_cmd "upgrade" nix-env -u || rc=$? + run_cmd "collect garbage" nix-collect-garbage -d || true + fi + ;; + brew) + run_cmd "update" brew update || rc=$? + run_cmd "upgrade" brew upgrade || rc=$? + run_cmd "upgrade casks" brew upgrade --cask || true + run_cmd "cleanup" brew cleanup -s || true + ;; + mas) + run_cmd "mas upgrade" mas upgrade || rc=$? + ;; + softwareupdate) + if (( ARG_SECURITY )); then + run_cmd "install recommended" $sudo_cmd softwareupdate --install --recommended --agree-to-license || rc=$? + else + run_cmd "list" softwareupdate --list || true + run_cmd "install all" $sudo_cmd softwareupdate --install --all --agree-to-license --no-scan || rc=$? + fi + ;; + flatpak) + run_cmd "update" flatpak update -y --noninteractive || rc=$? + run_cmd "uninstall unused" flatpak uninstall --unused -y --noninteractive || true + ;; + snap) + run_cmd "refresh" $sudo_cmd snap refresh || rc=$? + ;; + yay) + # shellcheck disable=SC2086 + run_cmd "AUR upgrade" yay -Syu --noconfirm $pacman_ignore || rc=$? + ;; + paru) + # shellcheck disable=SC2086 + run_cmd "AUR upgrade" paru -Syu --noconfirm $pacman_ignore || rc=$? + ;; + fwupd) + run_cmd "refresh metadata" $sudo_cmd fwupdmgr refresh --force || rc=$? + run_cmd "firmware update" $sudo_cmd fwupdmgr update -y --no-reboot-check || true + ;; + rustup) + run_cmd "rustup update" rustup update || rc=$? + ;; + cargo) + run_cmd "cargo install-update" cargo install-update -a || rc=$? + ;; + npm) + run_cmd "npm update -g" npm update -g || rc=$? + ;; + pnpm) + run_cmd "pnpm -g update" pnpm -g update || rc=$? + ;; + pip) + local pip_bin=pip + sys_has pip3 && pip_bin=pip3 + local flags="--user" + sys_is_root && flags="" + run_cmd "pip upgrade" bash -c "$pip_bin list --outdated --format=freeze $flags 2>/dev/null | cut -d= -f1 | xargs -r $pip_bin install -U $flags" || rc=$? + ;; + gem) + run_cmd "gem update" gem update || rc=$? + ;; + esac + + _PKG_CURRENT="" + if (( rc == 0 )); then + log_info "$mgr: ok" + else + log_error "$mgr: rc=$rc" + fi + return $rc +} diff --git a/src/lib/plugins.sh b/src/lib/plugins.sh new file mode 100644 index 0000000..24053c9 --- /dev/null +++ b/src/lib/plugins.sh @@ -0,0 +1,78 @@ +#!/usr/bin/env bash +# External package-manager plugins. +# +# A plugin is a *.sh file in ~/.config/emerger/managers.d/ that defines, +# at minimum, three functions named after its slug : +# +# pm__detect -> return 0 if the manager is present +# pm__run -> perform refresh/upgrade/clean, return 0/non-0 +# +# And optionally: +# +# pm__needs_sudo -> return 0 if the manager needs elevation +# pm__parallel -> return 0 if it's safe to run in parallel +# pm__dev -> return 0 if it belongs to --dev +# pm__icon -> print a short glyph +# +# The plugin must also declare its slug via: +# +# PM_PLUGIN_SLUG= +# +# when sourced. Example plugin at share/plugins/example.sh. + +PLUGIN_SLUGS=() + +plugins_load() { + local dir="$EMERGER_CONFIG/managers.d" + [[ -d $dir ]] || return 0 + local f slug + for f in "$dir"/*.sh; do + [[ -e $f ]] || continue + PM_PLUGIN_SLUG="" + # shellcheck disable=SC1090 + source "$f" || { ui_warn "plugin $f failed to load"; continue; } + slug="$PM_PLUGIN_SLUG" + if [[ -z $slug ]]; then + ui_warn "plugin $f did not set PM_PLUGIN_SLUG"; continue + fi + if ! declare -F "pm_${slug}_detect" >/dev/null; then + ui_warn "plugin $slug: missing pm_${slug}_detect"; continue + fi + if ! declare -F "pm_${slug}_run" >/dev/null; then + ui_warn "plugin $slug: missing pm_${slug}_run"; continue + fi + PLUGIN_SLUGS+=("$slug") + PKG_MANAGERS+=("$slug") + done +} + +plugin_is() { + local name="$1" s + for s in "${PLUGIN_SLUGS[@]}"; do + [[ $s == "$name" ]] && return 0 + done + return 1 +} + +plugin_needs_sudo() { + declare -F "pm_${1}_needs_sudo" >/dev/null && "pm_${1}_needs_sudo" +} +plugin_is_parallel() { + declare -F "pm_${1}_parallel" >/dev/null && "pm_${1}_parallel" +} +plugin_is_dev() { + declare -F "pm_${1}_dev" >/dev/null && "pm_${1}_dev" +} +plugin_detect() { + "pm_${1}_detect" +} +plugin_run() { + "pm_${1}_run" +} +plugin_icon() { + if declare -F "pm_${1}_icon" >/dev/null; then + "pm_${1}_icon" + else + printf '%s' "$(ui_glyph bullet)" + fi +} diff --git a/src/lib/profiles.sh b/src/lib/profiles.sh new file mode 100644 index 0000000..7f8f773 --- /dev/null +++ b/src/lib/profiles.sh @@ -0,0 +1,49 @@ +#!/usr/bin/env bash +# Profile loader. Profiles are bash snippets that set ARG_* defaults. +# Search order: +# 1) $EMERGER_CONFIG/profiles.d/.sh (user) +# 2) $EMERGER_ROOT/share/profiles/.sh (shipped) + +profile_load() { + local name="$1" + [[ -z $name ]] && return 0 + if [[ ! $name =~ ^[A-Za-z0-9._-]+$ ]]; then + printf 'Invalid profile name: "%s" (allowed: letters, digits, dot, dash, underscore)\n' "$name" >&2 + exit 2 + fi + local candidates=( + "$EMERGER_CONFIG/profiles.d/${name}.sh" + "$EMERGER_ROOT/share/profiles/${name}.sh" + ) + local f + for f in "${candidates[@]}"; do + if [[ -f $f ]]; then + # shellcheck disable=SC1090 + source "$f" + log_info "profile loaded: $name ($f)" + return 0 + fi + done + printf 'Profile "%s" not found. Looked in:\n' "$name" >&2 + printf ' %s\n' "${candidates[@]}" >&2 + exit 2 +} + +profile_list() { + ui_title "Available profiles" + local seen=() p n + for dir in "$EMERGER_CONFIG/profiles.d" "$EMERGER_ROOT/share/profiles"; do + [[ -d $dir ]] || continue + for p in "$dir"/*.sh; do + [[ -f $p ]] || continue + n=$(basename "$p" .sh) + local dup=0 s + for s in "${seen[@]:-}"; do [[ $s == "$n" ]] && dup=1; done + (( dup )) && continue + seen+=("$n") + local desc="" + desc=$(grep -m1 '^# description:' "$p" 2>/dev/null | sed 's/^# description:[[:space:]]*//' || true) + printf ' %s%s%s %s%s%s\n' "$C_CYAN" "$n" "$C_RESET" "$C_GRAY" "$desc" "$C_RESET" + done + done +} diff --git a/src/lib/progress.sh b/src/lib/progress.sh new file mode 100644 index 0000000..43710ff --- /dev/null +++ b/src/lib/progress.sh @@ -0,0 +1,37 @@ +#!/usr/bin/env bash +# Extract a short one-line stat from a command's captured output. +# Used to produce a collapsed summary at end of each step. + +progress_summarize() { + local mgr="$1" file="$2" + [[ -f $file ]] || { printf ''; return; } + case "$mgr" in + apt) + awk '/[0-9]+ upgraded/{for(i=1;i<=NF;i++)if($i=="upgraded,"){u=$(i-1)} for(i=1;i<=NF;i++)if($i=="newly"){n=$(i-1)} for(i=1;i<=NF;i++)if($i=="remove."){r=$(i-1)} printf "%s upgraded, %s new, %s removed", u+0, n+0, r+0; exit}' "$file" + ;; + pacman|yay|paru) + local pkgs + pkgs=$(grep -E '^Packages \([0-9]+\)' "$file" | tail -n1 | sed -E 's/^Packages \(([0-9]+)\).*/\1/') + [[ -n $pkgs ]] && printf '%s packages' "$pkgs" + ;; + dnf|yum) + awk '/^Upgrade +[0-9]+ Package/{print $2" upgraded"; exit} /^Install +[0-9]+ Package/{ins=$2} END{if(ins)print ins" installed"}' "$file" + ;; + flatpak) + grep -cE '^Updating|^Installing' "$file" | awk '{if($1>0)print $1" refreshed"}' + ;; + snap) + grep -cE 'refreshed' "$file" | awk '{if($1>0)print $1" refreshed"}' + ;; + *) : ;; + esac +} + +progress_highlight() { + # Colorize common error keywords in a stream. + sed -E \ + -e "s/(ERROR|Error|error)/$(printf '\033[31m')\1$(printf '\033[0m')/g" \ + -e "s/(WARNING|Warning|warning|WARN)/$(printf '\033[33m')\1$(printf '\033[0m')/g" \ + -e "s/^(E: .*)/$(printf '\033[31m')\1$(printf '\033[0m')/g" \ + -e "s/^(W: .*)/$(printf '\033[33m')\1$(printf '\033[0m')/g" +} diff --git a/src/lib/reboot.sh b/src/lib/reboot.sh new file mode 100644 index 0000000..ef31caa --- /dev/null +++ b/src/lib/reboot.sh @@ -0,0 +1,48 @@ +#!/usr/bin/env bash +# Detect whether the system needs a reboot after updates. + +REBOOT_NEEDED=0 +REBOOT_REASON="" + +reboot_check() { + REBOOT_NEEDED=0; REBOOT_REASON="" + if [[ -f /var/run/reboot-required ]]; then + REBOOT_NEEDED=1 + REBOOT_REASON="/var/run/reboot-required exists" + if [[ -f /var/run/reboot-required.pkgs ]]; then + REBOOT_REASON+=" ($(wc -l /dev/null 2>&1; then + REBOOT_NEEDED=1 + REBOOT_REASON="needs-restarting -r says so" + return + fi + fi + if sys_has dnf && dnf -q needs-restarting -r >/dev/null 2>&1; then + : + elif sys_has dnf; then + REBOOT_NEEDED=1; REBOOT_REASON="dnf needs-restarting"; return + fi + # Kernel version mismatch (running vs latest installed) + local running latest="" + running=$(uname -r) + if sys_has pacman; then + latest=$(pacman -Q linux 2>/dev/null | awk '{print $2}') + elif sys_has dpkg-query; then + latest=$(dpkg-query -W -f='${Version}' linux-image-generic 2>/dev/null || true) + fi + if [[ -n $latest ]] && [[ $running != *"$latest"* ]] && [[ -n $latest ]]; then + : # informational only; don't force reboot just for this + fi +} + +reboot_advisory() { + (( REBOOT_NEEDED )) || return 0 + printf '\n %s%s REBOOT RECOMMENDED%s %s%s%s\n' \ + "$C_YELLOW$C_BOLD" "$(ui_glyph warn)" "$C_RESET" \ + "$C_GRAY" "$REBOOT_REASON" "$C_RESET" + printf ' %srun:%s sudo reboot\n' "$C_DIM" "$C_RESET" +} diff --git a/src/lib/report.sh b/src/lib/report.sh new file mode 100644 index 0000000..d070af3 --- /dev/null +++ b/src/lib/report.sh @@ -0,0 +1,37 @@ +#!/usr/bin/env bash +# Export the last run's summary + diff as Markdown. + +report_export() { + local out="${1:-$EMERGER_STATE/last-report.md}" + local hist="$EMERGER_STATE/history.jsonl" + { + printf '# eMerger report\n\n' + printf '- host: `%s`\n' "$(hostname 2>/dev/null || echo '?')" + printf '- date: `%s`\n' "$(date -u +%Y-%m-%dT%H:%M:%SZ)" + printf '- distro: `%s`\n' "$(sys_distro)" + printf '- version: `eMerger %s`\n\n' "${EMERGER_VERSION:-?}" + if [[ -f $hist ]]; then + printf '## Last run\n\n```json\n' + tail -n 1 "$hist" + printf '```\n\n' + fi + if (( ${#SUMMARY_MANAGERS[@]:-0} > 0 )); then + printf '## Managers\n\n' + local i + for i in "${!SUMMARY_MANAGERS[@]}"; do + printf '- `%s` - **%s**\n' "${SUMMARY_MANAGERS[i]}" "${SUMMARY_RESULTS[i]}" + done + printf '\n' + fi + if [[ -s $DIFF_LAST ]]; then + printf '## Package changes\n\n' + printf '| kind | manager | package | version |\n|---|---|---|---|\n' + awk -F'\t' '{printf "| %s | %s | %s | %s |\n", $1, $2, $3, $4}' "$DIFF_LAST" + printf '\n' + fi + if (( REBOOT_NEEDED )); then + printf '> **Reboot recommended** - %s\n\n' "$REBOOT_REASON" + fi + } >"$out" + ui_ok "Report written to $out" +} diff --git a/src/lib/resume.sh b/src/lib/resume.sh new file mode 100644 index 0000000..0a6aa11 --- /dev/null +++ b/src/lib/resume.sh @@ -0,0 +1,30 @@ +#!/usr/bin/env bash +# Resume support: remember completed managers so an interrupted run can continue. + +: "${RESUME_FILE:=$EMERGER_STATE/resume}" + +resume_load() { + RESUME_DONE=() + [[ -f $RESUME_FILE ]] || return 0 + local line + while IFS= read -r line || [[ -n $line ]]; do + RESUME_DONE+=("$line") + done <"$RESUME_FILE" +} + +resume_has() { + local m="$1" x + for x in "${RESUME_DONE[@]:-}"; do + [[ $x == "$m" ]] && return 0 + done + return 1 +} + +resume_mark() { + local m="$1" + printf '%s\n' "$m" >>"$RESUME_FILE" +} + +resume_clear() { + rm -f "$RESUME_FILE" +} diff --git a/src/lib/retry.sh b/src/lib/retry.sh new file mode 100644 index 0000000..31d61d2 --- /dev/null +++ b/src/lib/retry.sh @@ -0,0 +1,25 @@ +#!/usr/bin/env bash +# Retry a command with exponential backoff on transient failures. +# Detects network errors by scanning output for common keywords. + +retry_cmd() { + local max="${1:-3}"; shift + local attempt=1 rc=0 + while :; do + "$@" + rc=$? + (( rc == 0 )) && return 0 + if (( attempt >= max )); then return "$rc"; fi + local backoff=$(( attempt * 3 )) + log_warn "retry attempt $attempt/$max for: $* (sleeping ${backoff}s)" + sleep "$backoff" + attempt=$(( attempt + 1 )) + done +} + +# Pattern tester: returns 0 if output looks like a transient network failure. +retry_is_transient() { + local text="$1" + local pat='(Temporary failure|Could not resolve|Connection (timed out|reset|refused)|network is unreachable|503 |502 |504 |failed to fetch|EOF occurred|timed out|Try again later)' + [[ $text =~ $pat ]] +} diff --git a/src/lib/run.sh b/src/lib/run.sh new file mode 100644 index 0000000..776748e --- /dev/null +++ b/src/lib/run.sh @@ -0,0 +1,65 @@ +#!/usr/bin/env bash +# Command runner: dry-run aware, live-log monitor, retry on transient errors, +# one-line collapsed summary on success. + +: "${DRY_RUN:=0}" +: "${UI_VERBOSE:=0}" +: "${RETRY_MAX:=2}" + +run_cmd() { + local label="$1"; shift + if (( DRY_RUN )); then + local joined; joined=$(IFS=' '; printf '%s' "$*") + ui_sub "[dry-run] $joined" + return 0 + fi + local rc=0 + if (( UI_VERBOSE )); then + ui_sub "$label" + "$@" + rc=$? + if (( rc == 0 )); then + return 0 + else + ui_fail "$label" "$rc" + log_error "$label: rc=$rc" + return "$rc" + fi + fi + + local tmp; tmp=$(mktemp -t emerger.XXXXXX) + trap 'rm -f "$tmp"' RETURN + local attempt=1 + while :; do + : >"$tmp" + ui_monitor_start "$label" "$tmp" + "$@" >"$tmp" 2>&1 + rc=$? + ui_monitor_stop + if (( rc == 0 )); then + local stat="" + stat=$(progress_summarize "${_PKG_CURRENT:-}" "$tmp") + if [[ -n $stat ]]; then + ui_done "$label" "$stat" + else + ui_done "$label" + fi + rm -f "$tmp" + return 0 + fi + local out; out=$(cat "$tmp" 2>/dev/null || true) + if retry_is_transient "$out" && (( attempt < RETRY_MAX )); then + ui_warn "$label: transient failure, retrying ($attempt/$RETRY_MAX)" + log_warn "$label: retry $attempt (rc=$rc)" + attempt=$(( attempt + 1 )) + sleep $(( attempt * 2 )) + continue + fi + ui_fail "$label" "$rc" + log_error "$label: rc=$rc" + tail -n 20 "$tmp" | progress_highlight >&2 + log_error "$(tail -n 50 "$tmp")" + rm -f "$tmp" + return "$rc" + done +} diff --git a/src/lib/snapshot.sh b/src/lib/snapshot.sh new file mode 100644 index 0000000..993e950 --- /dev/null +++ b/src/lib/snapshot.sh @@ -0,0 +1,81 @@ +#!/usr/bin/env bash +# Pre-update filesystem snapshot via snapper, timeshift or btrfs. + +snapshot_create() { + ui_title "Snapshot" + local desc="eMerger pre-update $(date -u +%Y-%m-%dT%H:%M:%SZ)" + if (( DRY_RUN )); then + ui_sub "[dry-run] would create snapshot: $desc" + return 0 + fi + if sys_has snapper && snapper list-configs 2>/dev/null | grep -q '^root'; then + if sudo snapper -c root create --description "$desc" --type single --cleanup-algorithm number; then + ui_ok "snapper snapshot created" + return 0 + fi + fi + if sys_has timeshift; then + if sudo timeshift --create --comments "$desc" --tags D >/dev/null 2>&1; then + ui_ok "timeshift snapshot created" + return 0 + fi + fi + if sys_has btrfs && mount | grep -q 'on / type btrfs'; then + local snap_dir="/.snapshots/emerger" + sudo mkdir -p "$snap_dir" 2>/dev/null || true + local name="$snap_dir/$(date +%Y-%m-%dT%H-%M-%S)" + if sudo btrfs subvolume snapshot -r / "$name" >/dev/null 2>&1; then + ui_ok "btrfs snapshot: $name" + return 0 + fi + fi + ui_warn "No snapshot tool available (snapper/timeshift/btrfs); continuing without." + return 1 +} + +# Roll back to the most recent eMerger-created snapshot. +# Supports snapper (native rollback) and timeshift (--restore). +# For raw btrfs snapshots the user must swap subvolumes manually - we print +# the path of the latest one and refuse to touch /. +snapshot_rollback() { + ui_title "Rollback" + if sys_has snapper && snapper list-configs 2>/dev/null | grep -q '^root'; then + local last + last=$(snapper -c root list 2>/dev/null | awk -F'|' '/eMerger pre-update/ {gsub(/ /,"",$2); last=$2} END{print last}') + if [[ -n $last ]]; then + ui_muted "Rolling back to snapper snapshot #$last" + if (( DRY_RUN )); then + ui_sub "[dry-run] would run: snapper -c root rollback $last" + return 0 + fi + if sudo snapper -c root rollback "$last"; then + ui_ok "Rollback queued. Reboot to apply." + return 0 + fi + ui_err "snapper rollback failed"; return 1 + fi + ui_warn "No eMerger snapper snapshot found." + fi + if sys_has timeshift; then + if (( DRY_RUN )); then + ui_sub "[dry-run] would run: timeshift --restore (interactive)" + return 0 + fi + ui_muted "Launching timeshift --restore" + sudo timeshift --restore + return $? + fi + if sys_has btrfs && mount | grep -q 'on / type btrfs'; then + local snap_dir="/.snapshots/emerger" latest + if [[ -d $snap_dir ]]; then + latest=$(ls -1t "$snap_dir" 2>/dev/null | head -n1) + if [[ -n $latest ]]; then + ui_warn "Latest btrfs snapshot: $snap_dir/$latest" + ui_warn "Automatic btrfs rollback is not performed - swap subvolumes manually." + return 1 + fi + fi + fi + ui_err "No rollback mechanism available." + return 1 +} diff --git a/src/lib/summary.sh b/src/lib/summary.sh new file mode 100644 index 0000000..167415c --- /dev/null +++ b/src/lib/summary.sh @@ -0,0 +1,160 @@ +#!/usr/bin/env bash +# Final summary: box banner, reboot advisory, optional package diff summary. + +: "${SUMMARY_FREED:=0}" +SUMMARY_MANAGERS=() +SUMMARY_RESULTS=() +SUMMARY_ERRORS=0 + +_fmt_bytes() { + local kb="$1" + if sys_has numfmt; then + numfmt --to=iec --suffix=B --format='%.1f' $(( kb * 1024 )) 2>/dev/null && return + fi + printf '%s KiB' "$kb" +} + +summary_json() { + local duration="$1" + local i first=1 + printf '{"ts":"%s","duration":%d,"freed_kb":%d,"errors":%d,"reboot":%d,"managers":[' \ + "$(date -u +%Y-%m-%dT%H:%M:%SZ)" "$duration" "$SUMMARY_FREED" "$SUMMARY_ERRORS" "${REBOOT_NEEDED:-0}" + for i in "${!SUMMARY_MANAGERS[@]}"; do + (( first )) || printf ',' + first=0 + printf '{"name":"%s","result":"%s"}' "${SUMMARY_MANAGERS[i]}" "${SUMMARY_RESULTS[i]}" + done + printf ']}\n' +} + +summary_print() { + local duration="$1" + + if (( ARG_JSON )); then + reboot_check + summary_json "$duration" + _persist_history "$duration" + return + fi + + (( QUIET_LEVEL >= 3 )) && return + + local min=$(( duration / 60 )) s=$(( duration % 60 )) + local ok_count=0 fail_count=0 i + for i in "${!SUMMARY_MANAGERS[@]}"; do + if [[ ${SUMMARY_RESULTS[i]} == ok ]]; then + ok_count=$(( ok_count + 1 )) + else + fail_count=$(( fail_count + 1 )) + fi + done + + local mgr_list="" + if (( ${#SUMMARY_MANAGERS[@]} > 0 )); then + for i in "${!SUMMARY_MANAGERS[@]}"; do + if [[ ${SUMMARY_RESULTS[i]} == ok ]]; then + mgr_list+="${C_GREEN}$(ui_glyph check)${C_RESET} ${SUMMARY_MANAGERS[i]} " + else + mgr_list+="${C_RED}$(ui_glyph cross)${C_RESET} ${SUMMARY_MANAGERS[i]} " + fi + done + fi + + local dur_line="duration: ${min}m${s}s" + local freed_line="" + (( SUMMARY_FREED > 0 )) && freed_line="freed: $(_fmt_bytes "$SUMMARY_FREED")" + local changed_line="" + local changed_n; changed_n=$(diff_count_changed 2>/dev/null || echo 0) + (( changed_n > 0 )) && changed_line="pkg diff: ${changed_n} changes (up --changed)" + local err_line + if (( SUMMARY_ERRORS > 0 )); then + err_line="${C_YELLOW}${SUMMARY_ERRORS} error(s) - up --errors${C_RESET}" + else + err_line="${C_GREEN}no errors${C_RESET}" + fi + + if (( QUIET_LEVEL >= 2 )); then + if (( SUMMARY_ERRORS > 0 )); then + printf '%s/%s managers ok, %s error(s), %dm%02ds\n' \ + "$ok_count" "$(( ok_count + fail_count ))" "$SUMMARY_ERRORS" "$min" "$s" + else + printf '%s managers ok, %dm%02ds\n' "$ok_count" "$min" "$s" + fi + _persist_history "$duration" + reboot_check; reboot_advisory + return + fi + + local lines=("$dur_line") + [[ -n $freed_line ]] && lines+=("$freed_line") + [[ -n $changed_line ]] && lines+=("$changed_line") + lines+=("$err_line") + [[ -n $mgr_list ]] && lines=("$mgr_list" "" "${lines[@]}") + + ui_box "eMerger summary" "${lines[@]}" + + reboot_check + reboot_advisory + + _persist_history "$duration" +} + +_persist_history() { + local duration="$1" + { + printf '{"ts":"%s","duration":%d,"freed_kb":%d,"errors":%d,"reboot":%d,"managers":[' \ + "$(date -u +%Y-%m-%dT%H:%M:%SZ)" "$duration" "$SUMMARY_FREED" "$SUMMARY_ERRORS" "${REBOOT_NEEDED:-0}" + local first=1 i + for i in "${!SUMMARY_MANAGERS[@]}"; do + (( first )) || printf ',' + first=0 + printf '{"name":"%s","result":"%s"}' "${SUMMARY_MANAGERS[i]}" "${SUMMARY_RESULTS[i]}" + done + printf ']}\n' + } >>"$EMERGER_STATE/history.jsonl" 2>/dev/null || true + + local hist="$EMERGER_STATE/history.jsonl" + if [[ -f $hist ]] && [[ $(wc -l <"$hist") -gt 500 ]]; then + tail -n 500 "$hist" >"$hist.tmp" && mv "$hist.tmp" "$hist" + fi +} + +show_errors() { + local log="$EMERGER_LOG" + if [[ ! -f $log ]]; then + ui_ok "No log yet." + return 0 + fi + local count + count=$(grep -c '|ERROR|' "$log" 2>/dev/null || true) + : "${count:=0}" + if (( count == 0 )); then + ui_ok "No errors logged." + else + ui_warn "$count error line(s) in $log:" + grep '|ERROR|' "$log" | tail -n 30 | progress_highlight | sed 's/^/ /' + fi +} + +show_history() { + local hist="$EMERGER_STATE/history.jsonl" + if [[ ! -f $hist ]]; then + ui_muted "No history yet." + return + fi + ui_title "Recent runs" + tail -n 10 "$hist" | while IFS= read -r line; do + local ts dur err reboot + ts=$(printf '%s' "$line" | sed -n 's/.*"ts":"\([^"]*\)".*/\1/p') + dur=$(printf '%s' "$line" | sed -n 's/.*"duration":\([0-9]*\).*/\1/p') + err=$(printf '%s' "$line" | sed -n 's/.*"errors":\([0-9]*\).*/\1/p') + reboot=$(printf '%s' "$line" | sed -n 's/.*"reboot":\([0-9]*\).*/\1/p') + local tag="" + [[ ${reboot:-0} -gt 0 ]] && tag=" ${C_YELLOW}reboot${C_RESET}" + if [[ ${err:-0} -gt 0 ]]; then + printf ' %s%s%s %s %ss %serrors=%s%s%s\n' "$C_RED" "$(ui_glyph cross)" "$C_RESET" "$ts" "$dur" "$C_YELLOW" "$err" "$C_RESET" "$tag" + else + printf ' %s%s%s %s %ss%s\n' "$C_GREEN" "$(ui_glyph check)" "$C_RESET" "$ts" "$dur" "$tag" + fi + done +} diff --git a/src/lib/sys.sh b/src/lib/sys.sh new file mode 100644 index 0000000..9f504ca --- /dev/null +++ b/src/lib/sys.sh @@ -0,0 +1,59 @@ +#!/usr/bin/env bash +# System detection helpers. + +sys_has() { command -v "$1" >/dev/null 2>&1; } +sys_is_macos() { [[ $(uname -s) == Darwin ]]; } +sys_is_linux() { [[ $(uname -s) == Linux ]]; } +sys_brew_prefix() { command -v brew >/dev/null 2>&1 && brew --prefix 2>/dev/null; } + +sys_os() { + case "$(uname -s)" in + Linux) echo linux ;; + Darwin) echo macos ;; + MINGW*|MSYS*|CYGWIN*) echo windows ;; + *) echo unknown ;; + esac +} + +sys_distro() { + if [[ -f /etc/os-release ]]; then + # shellcheck disable=SC1091 + . /etc/os-release + echo "${PRETTY_NAME:-${NAME:-unknown}}" + else + uname -sr + fi +} + +sys_shell_rc() { + local sh + sh=$(basename "${SHELL:-bash}") + case "$sh" in + bash) echo "$HOME/.bashrc" ;; + zsh) echo "${ZDOTDIR:-$HOME}/.zshrc" ;; + fish) echo "$HOME/.config/fish/config.fish" ;; + *) echo "$HOME/.${sh}rc" ;; + esac +} + +sys_on_battery() { + [[ -d /sys/class/power_supply ]] || return 1 + local ac found=0 + for ac in /sys/class/power_supply/A{C,DP,C0,DP0}*/online; do + [[ -f $ac ]] || continue + found=1 + [[ $(cat "$ac" 2>/dev/null) == 1 ]] && return 1 + done + (( found )) && return 0 + return 1 +} + +sys_battery_percent() { + local cap + for cap in /sys/class/power_supply/BAT*/capacity; do + [[ -f $cap ]] && { cat "$cap"; return; } + done + echo 100 +} + +sys_is_root() { [[ ${EUID:-$(id -u)} -eq 0 ]]; } diff --git a/src/lib/tui.sh b/src/lib/tui.sh new file mode 100644 index 0000000..13cdb8c --- /dev/null +++ b/src/lib/tui.sh @@ -0,0 +1,54 @@ +#!/usr/bin/env bash +# Interactive TUI using gum or whiptail, falling back to a simple read loop. + +tui_menu() { + local choice + if sys_has gum; then + choice=$(gum choose --header="eMerger" \ + "Update all" \ + "Dry run" \ + "Security updates only" \ + "Include dev tools (rust/npm/pip...)" \ + "Show errors" \ + "Show history" \ + "Self-update" \ + "Quit") || return 0 + elif sys_has whiptail; then + choice=$(whiptail --title "eMerger" --menu "Choose an action" 18 60 8 \ + "Update all" "full system update" \ + "Dry run" "simulate without changes" \ + "Security updates only" "apt/dnf/zypper security" \ + "Include dev tools (rust/npm/pip...)" "also update toolchains" \ + "Show errors" "read log errors" \ + "Show history" "last 10 runs" \ + "Self-update" "git pull eMerger" \ + "Quit" "exit" \ + 3>&1 1>&2 2>&3) || return 0 + else + printf '\n Install "gum" or "whiptail" for a nicer menu.\n\n' + printf ' 1) Update all\n 2) Dry run\n 3) Security only\n 4) + dev tools\n 5) Errors\n 6) History\n 7) Self-update\n q) Quit\n\n' + local pick + read -r -p " > " pick + case "$pick" in + 1) choice="Update all" ;; + 2) choice="Dry run" ;; + 3) choice="Security updates only" ;; + 4) choice="Include dev tools (rust/npm/pip...)" ;; + 5) choice="Show errors" ;; + 6) choice="Show history" ;; + 7) choice="Self-update" ;; + *) return 0 ;; + esac + fi + + case "$choice" in + "Update all") ARG_YES=1 ;; + "Dry run") ARG_DRY=1; DRY_RUN=1 ;; + "Security updates only") ARG_SECURITY=1; ARG_YES=1 ;; + "Include dev tools"*) ARG_DEV=1; ARG_YES=1 ;; + "Show errors") show_errors; exit 0 ;; + "Show history") show_history; exit 0 ;; + "Self-update") self_update "$EMERGER_ROOT"; exit $? ;; + *) exit 0 ;; + esac +} diff --git a/src/lib/ui.sh b/src/lib/ui.sh new file mode 100644 index 0000000..7fc9228 --- /dev/null +++ b/src/lib/ui.sh @@ -0,0 +1,220 @@ +#!/usr/bin/env bash +# UI primitives: colors, glyphs, boxes, steps, live log monitor, box banner. + +: "${ARG_NO_EMOJI:=0}" +: "${QUIET_LEVEL:=0}" + +_ui_detect_light_bg() { + # Parse COLORFGBG="fg;bg". A low bg value (0-6) = dark theme, 7+ = light. + [[ -z ${COLORFGBG:-} ]] && { UI_LIGHT_BG=0; return; } + local bg="${COLORFGBG##*;}" + if [[ $bg =~ ^[0-9]+$ ]] && (( bg >= 7 )); then + UI_LIGHT_BG=1 + else + UI_LIGHT_BG=0 + fi +} + +_ui_init() { + local colors=0 + _ui_detect_light_bg + if [[ -n ${NO_COLOR:-} ]] || [[ ${TERM:-} == dumb ]] || ! [[ -t 1 ]]; then + C_RESET="" C_BOLD="" C_DIM="" + C_RED="" C_GREEN="" C_YELLOW="" C_BLUE="" C_MAGENTA="" C_CYAN="" C_GRAY="" + UI_TTY=0 + else + command -v tput >/dev/null 2>&1 && colors=$(tput colors 2>/dev/null || echo 0) + C_RESET=$'\e[0m'; C_BOLD=$'\e[1m'; C_DIM=$'\e[2m' + if (( colors >= 256 )); then + if (( UI_LIGHT_BG )); then + C_RED=$'\e[38;5;160m'; C_GREEN=$'\e[38;5;28m'; C_YELLOW=$'\e[38;5;136m' + C_BLUE=$'\e[38;5;26m'; C_MAGENTA=$'\e[38;5;90m'; C_CYAN=$'\e[38;5;30m' + C_GRAY=$'\e[38;5;240m' + else + C_RED=$'\e[38;5;203m'; C_GREEN=$'\e[38;5;114m'; C_YELLOW=$'\e[38;5;221m' + C_BLUE=$'\e[38;5;39m'; C_MAGENTA=$'\e[38;5;176m'; C_CYAN=$'\e[38;5;81m' + C_GRAY=$'\e[38;5;245m' + fi + else + C_RED=$'\e[31m'; C_GREEN=$'\e[32m'; C_YELLOW=$'\e[33m' + C_BLUE=$'\e[34m'; C_MAGENTA=$'\e[35m'; C_CYAN=$'\e[36m'; C_GRAY=$'\e[37m' + fi + UI_TTY=1 + fi + if (( ARG_NO_EMOJI )); then + UI_UNICODE=0 + elif [[ ${LANG:-} =~ [Uu][Tt][Ff]-?8 ]] || [[ ${LC_ALL:-} =~ [Uu][Tt][Ff]-?8 ]] || [[ ${LC_CTYPE:-} =~ [Uu][Tt][Ff]-?8 ]]; then + UI_UNICODE=1 + else + UI_UNICODE=0 + fi +} +_ui_init + +ui_reinit() { _ui_init; } + +ui_glyph() { + if (( UI_UNICODE )); then + case "$1" in + check) printf '\xe2\x9c\x94' ;; + cross) printf '\xe2\x9c\x96' ;; + arrow) printf '\xe2\x96\xb6' ;; + info) printf '\xe2\x84\xb9' ;; + warn) printf '\xe2\x9a\xa0' ;; + bullet) printf '\xe2\x80\xa2' ;; + hline) printf '\xe2\x94\x80' ;; + dot) printf '\xc2\xb7' ;; + tl) printf '\xe2\x95\xad' ;; + tr) printf '\xe2\x95\xae' ;; + bl) printf '\xe2\x95\xb0' ;; + br) printf '\xe2\x95\xaf' ;; + v) printf '\xe2\x94\x82' ;; + esac + else + case "$1" in + check) printf '[OK]' ;; + cross) printf '[X]' ;; + arrow) printf '>' ;; + info) printf 'i' ;; + warn) printf '!' ;; + bullet) printf '*' ;; + hline) printf '-' ;; + dot) printf '.' ;; + tl|tr|bl|br) printf '+' ;; + v) printf '|' ;; + esac + fi +} + +ui_width() { + local w + w=$(tput cols 2>/dev/null || echo 80) + (( w > 0 )) || w=80 + printf '%d' "$w" +} + +ui_hr() { + (( QUIET_LEVEL >= 2 )) && return + local w ch line + w=$(ui_width); (( w > 80 )) && w=80 + ch=$(ui_glyph hline) + printf -v line '%*s' "$w" '' + printf '%s%s%s\n' "$C_GRAY" "${line// /$ch}" "$C_RESET" +} + +ui_title() { (( QUIET_LEVEL >= 2 )) && return; printf '\n%s%s %s%s\n' "$C_CYAN$C_BOLD" "$(ui_glyph arrow)" "$*" "$C_RESET"; ui_hr; } +ui_info() { (( QUIET_LEVEL >= 2 )) && return; printf ' %s%s%s %s\n' "$C_BLUE" "$(ui_glyph info)" "$C_RESET" "$*"; } +ui_ok() { (( QUIET_LEVEL >= 2 )) && return; printf ' %s%s%s %s\n' "$C_GREEN" "$(ui_glyph check)" "$C_RESET" "$*"; } +ui_warn() { printf ' %s%s%s %s\n' "$C_YELLOW" "$(ui_glyph warn)" "$C_RESET" "$*"; } +ui_err() { printf ' %s%s%s %s\n' "$C_RED$C_BOLD" "$(ui_glyph cross)" "$C_RESET" "$*" >&2; } +ui_muted() { (( QUIET_LEVEL >= 1 )) && return; printf ' %s%s%s\n' "$C_DIM$C_GRAY" "$*" "$C_RESET"; } +ui_step() { (( QUIET_LEVEL >= 2 )) && return; printf '\n%s[%d/%d]%s %s %s%s%s\n' "$C_MAGENTA" "$1" "$2" "$C_RESET" "$(ui_glyph arrow)" "$C_BOLD" "$3" "$C_RESET"; } +ui_sub() { (( QUIET_LEVEL >= 1 )) && return; printf ' %s%s%s %s\n' "$C_GRAY" "$(ui_glyph dot)" "$C_RESET" "$*"; } + +# Collapsed summary line for a finished step. +ui_done() { + local label="$1" stat="${2:-}" + (( QUIET_LEVEL >= 2 )) && return + if [[ -n $stat ]]; then + printf ' %s%s%s %s %s\xe2\x80\x94%s %s%s%s\n' \ + "$C_GREEN" "$(ui_glyph check)" "$C_RESET" "$label" \ + "$C_DIM$C_GRAY" "$C_RESET" "$C_GRAY" "$stat" "$C_RESET" + else + printf ' %s%s%s %s\n' "$C_GREEN" "$(ui_glyph check)" "$C_RESET" "$label" + fi +} + +ui_fail() { + local label="$1" rc="${2:-1}" + printf ' %s%s%s %s %s(rc=%s)%s\n' \ + "$C_RED$C_BOLD" "$(ui_glyph cross)" "$C_RESET" "$label" "$C_DIM$C_GRAY" "$rc" "$C_RESET" >&2 +} + +# Live log monitor: follow $file, print spinner frame plus last tail line. +# Replaces the old blind spinner. +_MON_PID=0 +ui_monitor_start() { + (( QUIET_LEVEL >= 2 )) && return + (( ${UI_VERBOSE:-0} )) && { ui_sub "$1"; return; } + (( UI_TTY )) || { ui_sub "$1"; return; } + local label="$1" file="$2" hint="${3:-}" + ( + local frames + if (( UI_UNICODE )); then + frames=($'\xe2\xa0\x8b' $'\xe2\xa0\x99' $'\xe2\xa0\xb9' $'\xe2\xa0\xb8' $'\xe2\xa0\xbc' $'\xe2\xa0\xb4' $'\xe2\xa0\xa6' $'\xe2\xa0\xa7' $'\xe2\xa0\x87' $'\xe2\xa0\x8f') + else + frames=('|' '/' '-' '\\') + fi + local i=0 + trap 'exit 0' TERM + while :; do + local last="" w max + w=$(tput cols 2>/dev/null || echo 80) + max=$(( w - 10 - ${#label} - ${#hint} )) + (( max < 10 )) && max=10 + if [[ -f $file ]]; then + last=$(tail -n 1 "$file" 2>/dev/null | tr -d '\r' | sed -E 's/\x1b\[[0-9;]*[a-zA-Z]//g') + last=${last:0:max} + fi + printf "\r\033[K %s%s%s %s%s %s%s%s" \ + "$C_CYAN" "${frames[i]}" "$C_RESET" \ + "$label" \ + "$( [[ -n $hint ]] && printf ' %s(%s)%s' "$C_DIM$C_GRAY" "$hint" "$C_RESET" )" \ + "$C_DIM$C_GRAY" "$last" "$C_RESET" + i=$(( (i+1) % ${#frames[@]} )) + sleep 0.12 + done + ) & + _MON_PID=$! + disown "$_MON_PID" 2>/dev/null || true +} + +ui_monitor_stop() { + if (( _MON_PID > 0 )) 2>/dev/null; then + kill "$_MON_PID" 2>/dev/null || true + wait "$_MON_PID" 2>/dev/null || true + _MON_PID=0 + (( UI_TTY )) && printf '\r\033[K' + fi +} + +# Back-compat aliases used elsewhere. +ui_spinner_start() { ui_monitor_start "$1" /dev/null; } +ui_spinner_stop() { ui_monitor_stop; } + +ui_print_logo() { + local logo="$1" + [[ -f $logo ]] || return 0 + (( QUIET_LEVEL >= 1 )) && return + local w; w=$(ui_width) + (( w < 60 )) && return 0 + printf '%s' "$C_GREEN$C_BOLD" + cat "$logo" + printf '%s\n' "$C_RESET" +} + +# Pretty banner box used for the final summary. +ui_box() { + local title="$1"; shift + local lines=("$@") + local tl tr bl br v h + tl=$(ui_glyph tl); tr=$(ui_glyph tr); bl=$(ui_glyph bl); br=$(ui_glyph br) + v=$(ui_glyph v); h=$(ui_glyph hline) + local maxlen=${#title} + local l + for l in "${lines[@]}"; do + local stripped; stripped=$(printf '%s' "$l" | sed -E 's/\x1b\[[0-9;]*[a-zA-Z]//g') + (( ${#stripped} > maxlen )) && maxlen=${#stripped} + done + (( maxlen < 30 )) && maxlen=30 + local bar; printf -v bar '%*s' "$((maxlen+2))" ''; bar=${bar// /$h} + printf '\n %s%s%s%s%s\n' "$C_CYAN" "$tl" "$bar" "$tr" "$C_RESET" + printf ' %s%s%s %s%-*s%s %s%s%s\n' "$C_CYAN" "$v" "$C_RESET" "$C_BOLD" "$maxlen" "$title" "$C_RESET" "$C_CYAN" "$v" "$C_RESET" + printf ' %s%s%s%s%s\n' "$C_CYAN" "$v" "$bar" "$v" "$C_RESET" + for l in "${lines[@]}"; do + local stripped; stripped=$(printf '%s' "$l" | sed -E 's/\x1b\[[0-9;]*[a-zA-Z]//g') + local pad=$(( maxlen - ${#stripped} )) + printf ' %s%s%s %s%*s %s%s%s\n' "$C_CYAN" "$v" "$C_RESET" "$l" "$pad" "" "$C_CYAN" "$v" "$C_RESET" + done + printf ' %s%s%s%s%s\n' "$C_CYAN" "$bl" "$bar" "$br" "$C_RESET" +} diff --git a/src/lib/update.sh b/src/lib/update.sh new file mode 100644 index 0000000..190f361 --- /dev/null +++ b/src/lib/update.sh @@ -0,0 +1,78 @@ +#!/usr/bin/env bash +# Self-update (git pull) and auto-update scheduling (systemd user timer or cron). + +self_update() { + local root="$1" + ui_title "Self-update" + if [[ ! -d "$root/.git" ]]; then + ui_err "Not a git checkout. Re-clone: git clone https://github.com/MasterCruelty/eMerger" + return 1 + fi + if ! sys_has git; then + ui_err "git not installed" + return 1 + fi + local branch before after + branch=$(git -C "$root" rev-parse --abbrev-ref HEAD) + ui_info "Branch: $branch" + if (( DRY_RUN )); then + ui_sub "[dry-run] git -C $root pull --ff-only" + return 0 + fi + before=$(git -C "$root" rev-parse HEAD) + if ! git -C "$root" fetch --quiet; then + ui_err "git fetch failed" + return 1 + fi + if ! git -C "$root" pull --ff-only --quiet; then + ui_err "git pull failed (non fast-forward?)" + return 1 + fi + after=$(git -C "$root" rev-parse HEAD) + if [[ $before == "$after" ]]; then + ui_ok "Already up to date." + else + ui_ok "Updated ${before:0:7}..${after:0:7}" + git -C "$root" log --oneline "$before..$after" | sed "s/^/ $(ui_glyph dot) /" + fi +} + +setup_cron() { + local root="$1" + ui_title "Enable auto-update" + if sys_has systemctl && [[ -d /run/systemd/system ]] || sys_has systemctl && systemctl --user show-environment >/dev/null 2>&1; then + local unit_dir="$HOME/.config/systemd/user" + mkdir -p "$unit_dir" + cat >"$unit_dir/emerger.service" <"$unit_dir/emerger.timer" </dev/null | grep -v "emerger.sh" || true; echo "$cronline" ) | crontab - + ui_ok "Weekly cronjob installed (Sunday 10:00)" + else + ui_err "Neither systemd --user nor crontab available." + return 1 + fi +} diff --git a/src/lib/wizard.sh b/src/lib/wizard.sh new file mode 100644 index 0000000..dbf0e06 --- /dev/null +++ b/src/lib/wizard.sh @@ -0,0 +1,32 @@ +#!/usr/bin/env bash +# First-run wizard: ask 3 questions, seed config.sh. + +wizard_maybe_run() { + local cfg="$EMERGER_CONFIG/config.sh" + local flag="$EMERGER_CONFIG/.wizard-done" + [[ -f $flag ]] && return 0 + [[ ! -t 0 ]] && return 0 + (( ARG_QUIET )) && return 0 + + ui_title "First-run setup" + ui_muted "Quick 3-question setup. Skip with Ctrl-C at any time." + mkdir -p "$EMERGER_CONFIG" + + local a1 a2 a3 + read -r -p " Include dev toolchains (rust/npm/pip...) by default? [y/N]: " a1 || a1=n + read -r -p " Show weather line? [y/N]: " a2 || a2=n + read -r -p " Install weekly auto-update timer? [y/N]: " a3 || a3=n + + { + printf '# eMerger user config - generated by the wizard %s\n' "$(date -u +%Y-%m-%dT%H:%M:%SZ)" + printf '# Edit freely; it is sourced before argument parsing.\n\n' + [[ $a1 == [yY]* ]] && printf 'ARG_DEV=1\n' + [[ $a2 == [yY]* ]] && printf 'ARG_WEATHER=1\n' + } >"$cfg" + + touch "$flag" + ui_ok "Wrote $cfg" + if [[ $a3 == [yY]* ]]; then + setup_cron "$EMERGER_ROOT" || true + fi +} diff --git a/src/logo/logo.txt b/src/logo/logo.txt new file mode 100644 index 0000000..8092204 --- /dev/null +++ b/src/logo/logo.txt @@ -0,0 +1,6 @@ +███████╗███╗ ███╗███████╗██████╗ ██████╗ ███████╗██████╗ +██╔════╝████╗ ████║██╔════╝██╔══██╗██╔════╝ ██╔════╝██╔══██╗ +█████╗ ██╔████╔██║█████╗ ██████╔╝██║ ███╗█████╗ ██████╔╝ +██╔══╝ ██║╚██╔╝██║██╔══╝ ██╔══██╗██║ ██║██╔══╝ ██╔══██╗ +███████╗██║ ╚═╝ ██║███████╗██║ ██║╚██████╔╝███████╗██║ ██║ +╚══════╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ ╚═════╝ ╚══════╝╚═╝ ╚═╝ diff --git a/src/package/Linux/arch.sh b/src/package/Linux/arch.sh deleted file mode 100755 index a98b49b..0000000 --- a/src/package/Linux/arch.sh +++ /dev/null @@ -1,25 +0,0 @@ -#!/bin/bash - -SRC=$(dirname "$(readlink -f "$0")") -source $SRC/utils/global.sh - -PWR=$(source $SRC/utils/check_pwr.sh) -PKG="pacman" - -puts BLUE "Using $PKG $ARCH" - -puts RED "update: starting" -try $PWR $PKG -Syy -puts GREEN "update: completed" - -puts RED "upgrade: starting" -try $PWR $PKG -Syu -puts GREEN "upgrade: completed" - -puts RED "clean pacman caches: starting" -try $PWR paccache -r -puts GREEN "clean pacman caches: starting" - -puts RED "update AUR packages: starting" -try yay -Syu -puts GREEN "update AUR packages: starting" diff --git a/src/package/Linux/debian.sh b/src/package/Linux/debian.sh deleted file mode 100755 index dc26403..0000000 --- a/src/package/Linux/debian.sh +++ /dev/null @@ -1,66 +0,0 @@ -#!/bin/bash - -SRC=$(dirname "$(readlink -f "$0")") -source $SRC/utils/global.sh - -PWR=$(source $SRC/utils/check_pwr.sh) -PKG="apt-get" - - -if [[ $(command -v apt) ]]; then - PKG="apt" - - #These lines works on some systems only, for example I receive an error on a raspberry. - #puts RED "configuration: starting" - #try $PWR $PKG --configure -a - #puts GREEN "configuration: completed" - #puts RED "Error on --configure option" - - puts BLUE "Using $PKG $DEBIAN" - - puts RED "fix broken: starting" - try $PWR $PKG --fix-broken install - puts GREEN "fix broken: completed" - - puts RED "update: starting" - try $PWR $PKG update - puts GREEN "update: completed" - - puts RED "full-upgrade: starting" - try $PWR $PKG full-upgrade - puts GREEN "full-upgrade: completed" - - puts RED "autoremove: starting" - try $PWR $PKG autoremove - puts GREEN "autoremove: completed" - - puts RED "autoclean: starting" - try $PWR $PKG autoclean - puts GREEN "autoclean: completed" - - puts RED "clean: starting" - try $PWR $PKG clean - puts GREEN "clean: completed" -else - puts BLUE "Using $PKG $DEBIAN" - - puts RED "update: starting" - try $PWR $PKG update - puts GREEN "update: completed" - - puts RED "dist-upgrade: starting" - try $PWR $PKG dist-upgrade - puts GREEN "dist-upgrade: completed" - - puts RED "autoremove: starting" - try $PWR $PKG autoremove - puts GREEN "autoremove: completed" - - puts RED "autoclean: starting" - try $PWR $PKG autoclean - puts GREEN "autoclean: completed" - - puts RED "clean: starting" - try $PWR $PKG clean - puts GREEN "clean: completed" -fi diff --git a/src/package/Linux/flatpak.sh b/src/package/Linux/flatpak.sh deleted file mode 100755 index d844147..0000000 --- a/src/package/Linux/flatpak.sh +++ /dev/null @@ -1,21 +0,0 @@ -#!/bin/bash - -SRC=$(dirname "$(readlink -f "$0")") -source $SRC/utils/global.sh - -PWR=$(source $SRC/utils/check_pwr.sh) -PKG="flatpak" - -puts BLUE "Using $PKG $FLATPAK" - -puts RED "update: starting" -try $PWR $PKG update -puts GREEN "update: completed" - -puts RED "repair: starting" -try $PWR $PKG repair -puts GREEN "repair: completed" - -puts RED "uninstall unused extensions: starting" -try $PWR $PKG uninstall --unused -puts GREEN "uninstall unused extensions: completed" diff --git a/src/package/Linux/gentoo.sh b/src/package/Linux/gentoo.sh deleted file mode 100755 index 17c6354..0000000 --- a/src/package/Linux/gentoo.sh +++ /dev/null @@ -1,22 +0,0 @@ -#!/bin/bash - -SRC=$(dirname "$(readlink -f "$0")") -source $SRC/utils/global.sh - -PWR=$(source $SRC/utils/check_pwr.sh) -PKG="emerge" - -puts BLUE "Using $PKG $GENTOO" - -puts RED "syncing: starting" -try $PWR $PKG --sync -puts GREEN "syncing: completed" - -puts RED "update: starting" -try $PWR $PKG --update --deep --newuse --with-bdeps y @world --ask -puts GREEN "update: completed" - -puts RED "deepclean: starting" -try $PWR $PKG --depclean --ask -revdep-rebuild -puts GREEN "deepclean: completed" diff --git a/src/package/Linux/nix.sh b/src/package/Linux/nix.sh deleted file mode 100755 index 18b268d..0000000 --- a/src/package/Linux/nix.sh +++ /dev/null @@ -1,17 +0,0 @@ -#!/bin/bash - -SRC=$(dirname "$(readlink -f "$0")") -source $SRC/utils/global.sh - -PWR=$(source $SRC/utils/check_pwr.sh) -PKG="nixos-rebuild switch" - -puts BLUE "Using $PKG $NIX" - -puts RED "upgrade: starting" -try $PWR $PKG --upgrade -puts GREEN "upgrade: completed" - -puts RED "repair: starting" -try $PWR $PKG --repair -puts GREEN "repair: completed" diff --git a/src/package/Linux/opensuse.sh b/src/package/Linux/opensuse.sh deleted file mode 100755 index a21f857..0000000 --- a/src/package/Linux/opensuse.sh +++ /dev/null @@ -1,25 +0,0 @@ -#!/bin/bash - -SRC=$(dirname "$(readlink -f "$0")") -source $SRC/utils/global.sh - -PWR=$(source $SRC/utils/check_pwr.sh) -PKG="zypper" - -puts BLUE "Using $PKG $OPENSUSE" - -puts RED "refresh: starting" -try $PWR $PKG refresh -puts GREEN "refresh: completed" - -puts RED "update: starting" -try $PWR $PKG up 2>/dev/null || $PWR $PKG dup -puts GREEN "update: completed" - -puts RED "remove dependencies: starting" -try $PWR $PKG rm chromium --clean-deps -puts GREEN "remove dependencies: completed" - -puts RED "list unneeded packages: starting" -try $PWR $PKG packages --unneeded -puts GREEN "list unneeded packages: completed" diff --git a/src/package/Linux/rpm.sh b/src/package/Linux/rpm.sh deleted file mode 100755 index 4d9dddc..0000000 --- a/src/package/Linux/rpm.sh +++ /dev/null @@ -1,39 +0,0 @@ -#!/bin/bash - -SRC=$(dirname "$(readlink -f "$0")") -source $SRC/utils/global.sh - -PWR=$(source $SRC/utils/check_pwr.sh) -PKG="rpm" - -if [[ $(command -v yum) ]]; then - PKG="yum" - - if [[ $(command -v dnf) ]]; then - PKG="dnf" - fi - - puts BLUE "Using $PKG $RPM" - - puts RED "update: starting" - try $PWR $PKG update - puts GREEN "update: completed" - - puts RED "upgrade: starting" - try $PWR $PKG upgrade - puts GREEN "upgrade: completed" - - puts RED "autoremove: starting" - try $PWR $PKG autoremove - puts GREEN "autoremove: completed" - - puts RED "clean all: starting" - try $PWR $PKG clean all - puts GREEN "clean all: completed" -else - puts BLUE "\nUsing $PKG $RPM" - - puts RED "freshen: starting" - try $PWR $PKG -l | xargs -I{} $PWR $PKG -F {} - puts GREEN "freshen: completed" -fi diff --git a/src/package/Linux/snap.sh b/src/package/Linux/snap.sh deleted file mode 100755 index 07ddf47..0000000 --- a/src/package/Linux/snap.sh +++ /dev/null @@ -1,13 +0,0 @@ -#!/bin/bash - -SRC=$(dirname "$(readlink -f "$0")") -source $SRC/utils/global.sh - -PWR=$(source $SRC/utils/check_pwr.sh) -PKG="snap" - -puts BLUE "Using $PKG $SNAP" - -puts RED "refresh: starting" -try $PWR $PKG refresh -puts GREEN "refresh: completed" diff --git a/src/package/Linux/termux.sh b/src/package/Linux/termux.sh deleted file mode 100755 index 801f3ef..0000000 --- a/src/package/Linux/termux.sh +++ /dev/null @@ -1,21 +0,0 @@ -#!/bin/bash - -SRC=$(dirname "$(readlink -f "$0")") -source $SRC/utils/global.sh - -PWR=$(source $SRC/utils/check_pwr.sh) -PKG="pkg" - -puts BLUE "Using $PKG $TERMUX" - -puts RED "update: starting" -try $PWR $PKG update -puts GREEN "update: completed" - -puts RED "upgrade: starting" -try $PWR $PKG upgrade -puts GREEN "upgrade: completed" - -puts RED "autoclean: starting" -try $PWR $PKG autoclean -puts GREEN "autoclean: completed" diff --git a/src/package/MacOS/MacOSUpdate.sh b/src/package/MacOS/MacOSUpdate.sh deleted file mode 100644 index 3862175..0000000 --- a/src/package/MacOS/MacOSUpdate.sh +++ /dev/null @@ -1,29 +0,0 @@ -#!/bin/bash -#Fetch MacOS version -osVersion=$(sw_vers -productVersion) - -installerPath="" -#Get major and minor version -majorVersion=$(echo $osVersion | cut -d "." -f 1) -minorVersion=$(echo $osVersion | cut -d "." -f 2) - -#Check which version is installed -if [ $majorVersion == "12" ];then - installerPath="install macOS Monterey.app" -elif [ $majorVersion == "11" ];then - installerPath="Install macOS Big Sur.app" -elif [ $minorVersion == "15"* ];then - installerPath="Install macOS Catalina.app" -elif - echo "Unsupported MacOS version." - exit 1 -fi - -#get full path -fullPath="/Applications/$installerPath/Contents/Resources/startosinstall" - -#command which updates system -softwareupdate --fetch-full-installer –full-installer-version $osVersion -echo "Inserire la password:" -#get privileges -sudo "$fullPath" --agreetolicense --forcequitapps --nointeraction --user "$USER" diff --git a/src/package/Windows/privileges.ps1 b/src/package/Windows/privileges.ps1 deleted file mode 100644 index 15b4fb3..0000000 --- a/src/package/Windows/privileges.ps1 +++ /dev/null @@ -1,3 +0,0 @@ -# Start Powershell as administrator -Start-Process powershell -Verb RunAs -ArgumentList "-NoProfile -ExecutionPolicy Bypass -File `"winUpdate.ps1`"" - diff --git a/src/package/Windows/winUpdate.ps1 b/src/package/Windows/winUpdate.ps1 deleted file mode 100644 index f5cb2b6..0000000 --- a/src/package/Windows/winUpdate.ps1 +++ /dev/null @@ -1,48 +0,0 @@ -# This script is focused on update Windows OS - -# Install PSWindowsUpdate if not installed -if (!(Get-Module -Name PSWindowsUpdate -ListAvailable)) { - Write-Host "Installing PSWindowsUpdate..." - Install-Module -Name PSWindowsUpdate -Force -Scope CurrentUser -} - -# Windows Update -Write-Host "Updating Windows..." -Write-Host "At the end your system will be rebooted..." -Get-WUInstall -AcceptAll -AutoReboot - - -####### Check installation and update of Chocolatey ####### - # If you wanna install Chocolatey, you need this command - # Set-ExecutionPolicy Bypass -Scope Process -Force; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1')) -if (!(Get-Command choco -ErrorAction SilentlyContinue)) { - Write-Host "Chocolatey not found. Skipping..." -} else { - Write-Host "Chocolatey is installed..." - Write-Host "Updating Chocolatey packages..." - choco upgrade all -y -} - -######## Check installation and update Nuget ####### - # If you wanna install Nugetm you need these commands. - # Invoke-Expression "& { $(irm https://dist.nuget.org/win-x86-commandline/latest/nuget.exe) | Out-File -FilePath $env:temp\nuget.exe }" - # Move-Item -Path "$env:temp\nuget.exe" -Destination "$env:ProgramFiles\NuGet" -Force -if (!(Get-Command nuget -ErrorAction SilentlyContinue)) { - Write-Host "NuGet not found. Skipping..." -} else { - Write-Host "NuGet is installed..." - Write-Host "Updating Nuget packages..." - Update-Package -ProjectName YourProjectName -Reinstall -} - -####### Check installation and update scoop ####### - # If you wanna install Scoop, you need this command. - # Set-ExecutionPolicy RemoteSigned -scope Process; iex (new-object net.webclient).downloadstring('https://get.scoop.sh') -if (!(Test-Path $env:USERPROFILE\scoop)) { - Write-Host "Scoop not found. Skipping..." -} else { - Write-Host "Scoop is installed..." - scoop update -} - -Write-Host "Update completed." diff --git a/src/pslib/Args.ps1 b/src/pslib/Args.ps1 new file mode 100644 index 0000000..8fb8de7 --- /dev/null +++ b/src/pslib/Args.ps1 @@ -0,0 +1,107 @@ +# Argument parser. Returns a PSCustomObject with booleans / strings. + +function Parse-Args { + param([string[]]$Argv) + $o = [pscustomobject]@{ + Help=$false; Version=$false + DryRun=$false; Verbose=$false; Yes=$false + Dev=$false; Security=$false; Firmware=$false + NoLogo=$false; NoInfo=$false; NoCache=$false; NoTrash=$false + Errors=$false; History=$false; Doctor=$false + SelfUpdate=$false; AutoUpdate=$false; RebuildCache=$false + Snapshot=$false; Reboot=$false + Profile=''; Changelog=''; Report='' + ListProfiles=$false; NoEmoji=$false; Interactive=$false + Parallel=$false; Changed=$false; Resume=$false + Json=$false; RebootExit=$false; DownloadOnly=$false + Only=''; Except=''; Metrics='' + } + if (-not $Argv) { return $o } + # Expand short-flag bundles: "-nv" -> "-n -v". + $allowed = 'hVnvqyiw'.ToCharArray() + $keep = @('-up','-au','-err','-rc','-nl','-ni','-nc','-nt','-qq','-qqq','-xyzzy', + '-h','-V','-n','-v','-q','-y','-i','-w') + $expanded = New-Object System.Collections.Generic.List[string] + foreach ($a in $Argv) { + $s = [string]$a + if ($keep -contains $s -or $s.StartsWith('--')) { [void]$expanded.Add($s); continue } + if ($s -match '^-[A-Za-z]{2,}$') { + $letters = $s.Substring(1).ToCharArray() + $all = $true + foreach ($c in $letters) { if ($allowed -notcontains $c) { $all = $false; break } } + if ($all) { + foreach ($c in $letters) { [void]$expanded.Add("-$c") } + continue + } + } + [void]$expanded.Add($s) + } + $Argv = $expanded.ToArray() + $i = 0 + while ($i -lt $Argv.Count) { + $a = [string]$Argv[$i] + switch -Regex -CaseSensitive ($a) { + '^(-h|--help|-help)$' { $o.Help = $true } + '^(-V|--version)$' { $o.Version = $true } + '^(-n|--dry-run)$' { $o.DryRun = $true } + '^(-v|--verbose)$' { $o.Verbose = $true; $script:UI_VERBOSE = $true } + '^(-q|--quiet)$' { $script:QUIET_LEVEL++ } + '^-qq$' { $script:QUIET_LEVEL = 2 } + '^-qqq$' { $script:QUIET_LEVEL = 3 } + '^(-y|--yes)$' { $o.Yes = $true } + '^--dev$' { $o.Dev = $true } + '^--security$' { $o.Security = $true } + '^--firmware$' { $o.Firmware = $true } + '^(-nl|--no-logo)$' { $o.NoLogo = $true } + '^(-ni|--no-info)$' { $o.NoInfo = $true } + '^(-nc|--no-cache)$' { $o.NoCache = $true } + '^(-nt|--no-trash)$' { $o.NoTrash = $true } + '^(-err|--errors)$' { $o.Errors = $true } + '^--history$' { $o.History = $true } + '^--doctor$' { $o.Doctor = $true } + '^(-up|--self-update)$' { $o.SelfUpdate = $true } + '^(-au|--auto-update)$' { $o.AutoUpdate = $true } + '^(-rc|--rebuild-cache)$' { $o.RebuildCache = $true } + '^--snapshot$' { $o.Snapshot = $true } + '^--reboot$' { $o.Reboot = $true } + '^--list-profiles$' { $o.ListProfiles = $true } + '^--no-emoji$' { $o.NoEmoji = $true; $script:UI_UNICODE = $false } + '^(-i|--interactive)$' { $o.Interactive = $true } + '^--parallel$' { $o.Parallel = $true } + '^--changed$' { $o.Changed = $true } + '^--resume$' { $o.Resume = $true } + '^--json$' { $o.Json = $true } + '^--reboot-exit$' { $o.RebootExit = $true } + '^(--download-only|--offline)$' { $o.DownloadOnly = $true } + '^--only$' { $i++; $o.Only = [string]$Argv[$i] } + '^--only=' { $o.Only = $a -replace '^--only=','' } + '^--except$' { $i++; $o.Except = [string]$Argv[$i] } + '^--except=' { $o.Except = $a -replace '^--except=','' } + '^--metrics$' { $i++; $o.Metrics = [string]$Argv[$i] } + '^--metrics=' { $o.Metrics = $a -replace '^--metrics=','' } + '^--profile$' { $i++; $o.Profile = [string]$Argv[$i] } + '^--profile=' { $o.Profile = $a -replace '^--profile=','' } + '^--changelog$' { $i++; $o.Changelog = [string]$Argv[$i] } + '^--changelog=' { $o.Changelog = $a -replace '^--changelog=','' } + '^--report$' { $i++; $o.Report = [string]$Argv[$i] } + '^--report=' { $o.Report = $a -replace '^--report=','' } + default { + [Console]::Error.WriteLine("Unknown argument: $a (try 'up --help')") + exit 2 + } + } + $i++ + } + return $o +} + +function Args-Prescan-Profile { + param([string[]]$Argv) + if (-not $Argv) { return '' } + for ($i = 0; $i -lt $Argv.Count; $i++) { + $a = [string]$Argv[$i] + if ($a -eq '--profile' -and ($i + 1) -lt $Argv.Count) { return [string]$Argv[$i+1] } + if ($a -match '^--profile=') { return ($a -replace '^--profile=','') } + } + return '' +} diff --git a/src/pslib/Clean.ps1 b/src/pslib/Clean.ps1 new file mode 100644 index 0000000..594caa5 --- /dev/null +++ b/src/pslib/Clean.ps1 @@ -0,0 +1,54 @@ +# Clean %TEMP% folders and the Recycle Bin. + +function _Clean-Confirm { + param([string]$Prompt) + if ($script:ArgsGlobal.Yes) { return $true } + $a = Read-Host " $Prompt [y/N]" + return $a -match '^[Yy]' +} + +function _Folder-Size-MB { + param([string]$Path) + if (-not (Test-Path $Path)) { return 0 } + try { + $sum = (Get-ChildItem $Path -Recurse -Force -ErrorAction SilentlyContinue | + Measure-Object Length -Sum).Sum + if (-not $sum) { return 0 } + return [math]::Round($sum / 1MB, 1) + } catch { return 0 } +} + +function Clean-Temp { + UI-Title 'Temp folders' + $paths = @($env:TEMP, (Join-Path $env:LOCALAPPDATA 'Temp'), (Join-Path $env:SystemRoot 'Temp')) | + Where-Object { $_ } | Select-Object -Unique + $before = 0 + foreach ($p in $paths) { $before += (_Folder-Size-MB $p) } + UI-Muted ("Paths: {0} Size: {1} MB" -f ($paths -join ', '), $before) + + if ($script:ArgsGlobal.DryRun) { UI-Sub '[dry-run] would clean temp folders'; return } + if (-not (_Clean-Confirm 'Clean temp folders?')) { UI-Muted 'skipped'; return } + + foreach ($p in $paths) { + if (-not (Test-Path $p)) { continue } + Get-ChildItem $p -Force -ErrorAction SilentlyContinue | ForEach-Object { + try { Remove-Item $_.FullName -Recurse -Force -ErrorAction Stop } catch {} + } + } + $after = 0 + foreach ($p in $paths) { $after += (_Folder-Size-MB $p) } + $script:SUMMARY_FREED_MB += [math]::Max(0, $before - $after) + UI-Ok ("temp cleaned ({0} MB)" -f [math]::Max(0, $before - $after)) +} + +function Clean-RecycleBin { + UI-Title 'Recycle bin' + if ($script:ArgsGlobal.DryRun) { UI-Sub '[dry-run] would empty recycle bin'; return } + if (-not (_Clean-Confirm 'Empty recycle bin?')) { UI-Muted 'skipped'; return } + try { + Clear-RecycleBin -Force -ErrorAction Stop + UI-Ok 'recycle bin emptied' + } catch { + UI-Warn "could not empty recycle bin: $($_.Exception.Message)" + } +} diff --git a/src/pslib/Doctor.ps1 b/src/pslib/Doctor.ps1 new file mode 100644 index 0000000..34f204f --- /dev/null +++ b/src/pslib/Doctor.ps1 @@ -0,0 +1,45 @@ +# Environment health check. + +function Doctor-Run { + UI-Title 'eMerger doctor (Windows)' + $issues = 0 + + UI-Ok "PowerShell $($PSVersionTable.PSVersion)" + + if (Sys-IsAdmin) { UI-Ok 'running as administrator' } + else { UI-Info 'not admin (elevation prompted when needed)' } + + $free = Sys-Disk-Free-GB 'C' + if ($free -lt 2) { UI-Warn "low disk space on C: ($free GB)"; $issues++ } + else { UI-Ok "disk: $free GB free on C:" } + + try { + if (Test-Connection -ComputerName 'github.com' -Count 1 -Quiet -ErrorAction Stop) { + UI-Ok 'network: github reachable' + } else { UI-Warn 'network: github unreachable'; $issues++ } + } catch { UI-Warn 'network: check failed'; $issues++ } + + $ep = Get-ExecutionPolicy -Scope CurrentUser + if ($ep -eq 'Restricted') { UI-Warn "ExecutionPolicy=$ep (run setup.ps1 to fix)"; $issues++ } + else { UI-Ok "ExecutionPolicy: $ep" } + + foreach ($m in $script:PKG_MANAGERS) { + if (Pkg-Detect $m) { UI-Ok "$m: detected" } + } + + if (Reboot-Pending) { UI-Warn 'reboot pending from a previous operation' } + + if ($script:ArgsGlobal.Dev) { + foreach ($m in $script:PKG_DEV) { + if (Pkg-Detect $m) { UI-Ok "$m (dev): detected" } + } + } + + UI-Hr + if ($issues -eq 0) { + UI-Ok 'all clear' + return 0 + } + UI-Warn "$issues issue(s) found" + return 1 +} diff --git a/src/pslib/Help.txt b/src/pslib/Help.txt new file mode 100644 index 0000000..c2fe0cd --- /dev/null +++ b/src/pslib/Help.txt @@ -0,0 +1,70 @@ +eMerger (Windows) - one-command system updater + +USAGE + up [options] + +GENERAL + -h, --help Show this help + -V, --version Show version + --doctor Run environment health check + +EXECUTION + -n, --dry-run Show what would be done, do nothing + -v, --verbose Stream pkg-manager output live + -q / -qq / -qqq Quieter (titles / summary only / exit code only) + -y, --yes Assume "yes" on prompts + --json Machine-readable run summary on stdout + Short single-letter flags bundle: -nv == -n -v + +SELECTION + --security Prefer security-only where supported + --dev Include dev toolchains (rustup, cargo, npm, pnpm, pip, gem) + --profile NAME Load a profile (share\profiles\.ps1) + --list-profiles List available profiles + --no-emoji ASCII glyphs only + +DISPLAY + -nl, --no-logo Hide logo + -ni, --no-info Hide system info line + -nc, --no-cache Skip %TEMP% cleaning + -nt, --no-trash Skip recycle bin + +INSPECTION + --history Last runs + -err, --errors Tail of logged errors + --reboot Reboot if the system requires it + --reboot-exit Exit 4 instead of 0 when a reboot is required + --download-only Download packages, do not install (where supported) + --offline Alias for --download-only + --only LIST Comma-separated managers to keep + --except LIST Comma-separated managers to skip + --metrics FILE Export last run as Prometheus textfile + +MAINTENANCE + -up, --self-update Update eMerger via git (fast-forward) + -au, --auto-update Register weekly Task Scheduler entry + -rc, --rebuild-cache Clear detection cache (no-op stub) + +EXAMPLES + up # normal run (elevates if needed) + up -n # preview + up --security -y # unattended security + up --dev # include rustup/npm/pip/gem + up --profile work # named profile + +CONFIG + %APPDATA%\emerger\config.ps1 Dot-sourced before argument parsing + %APPDATA%\emerger\profiles.d\*.ps1 User profiles + %APPDATA%\emerger\hooks\pre.d\*.ps1 Pre-update hooks + %APPDATA%\emerger\hooks\post.d\*.ps1 Post-update hooks + +STATE + %LOCALAPPDATA%\emerger\state\emerger.log Log + %LOCALAPPDATA%\emerger\state\history.jsonl Run history + +EXIT CODES + 0 success + 1 runtime failure + 2 argument parsing error + 3 one or more package managers failed + 4 reboot required (only with --reboot-exit) diff --git a/src/pslib/Hooks.ps1 b/src/pslib/Hooks.ps1 new file mode 100644 index 0000000..1faf9dc --- /dev/null +++ b/src/pslib/Hooks.ps1 @@ -0,0 +1,18 @@ +# User hook runner: *.ps1 scripts under hooks/{pre,post}.d/ + +function Hooks-Run { + param([string]$Phase) + $dir = Join-Path $script:EMERGER_CONFIG "hooks\$Phase.d" + if (-not (Test-Path $dir)) { return } + $scripts = @(Get-ChildItem $dir -Filter '*.ps1' -ErrorAction SilentlyContinue) + if ($scripts.Count -eq 0) { return } + UI-Title "Hooks ($Phase)" + foreach ($s in $scripts) { + UI-Sub $s.Name + if ($script:ArgsGlobal.DryRun) { continue } + try { & $s.FullName } catch { + UI-Warn "hook $($s.Name) failed: $($_.Exception.Message)" + Log-Warn "hook $Phase/$($s.Name) failed" + } + } +} diff --git a/src/pslib/Log.ps1 b/src/pslib/Log.ps1 new file mode 100644 index 0000000..19d115d --- /dev/null +++ b/src/pslib/Log.ps1 @@ -0,0 +1,25 @@ +# Structured logging to $EMERGER_LOG. + +function Log-Init { + $script:EMERGER_LOG = Join-Path $script:EMERGER_STATE 'emerger.log' + if (-not (Test-Path $script:EMERGER_STATE)) { + New-Item -ItemType Directory -Path $script:EMERGER_STATE -Force | Out-Null + } + if (-not (Test-Path $script:EMERGER_LOG)) { + New-Item -ItemType File -Path $script:EMERGER_LOG -Force | Out-Null + } + # Rotate at 2000 lines. + $count = (Get-Content $script:EMERGER_LOG -ErrorAction SilentlyContinue | Measure-Object).Count + if ($count -gt 2000) { + Get-Content $script:EMERGER_LOG -Tail 2000 | Set-Content $script:EMERGER_LOG + } +} + +function Log-Write { + param([string]$Level, [string]$Msg) + $ts = (Get-Date).ToUniversalTime().ToString('yyyy-MM-ddTHH:mm:ssZ') + try { Add-Content -Path $script:EMERGER_LOG -Value "$ts|$Level|$Msg" -ErrorAction Stop } catch {} +} +function Log-Info { param([string]$M) Log-Write 'INFO' $M } +function Log-Warn { param([string]$M) Log-Write 'WARN' $M } +function Log-Error { param([string]$M) Log-Write 'ERROR' $M } diff --git a/src/pslib/Notify.ps1 b/src/pslib/Notify.ps1 new file mode 100644 index 0000000..7fdbd31 --- /dev/null +++ b/src/pslib/Notify.ps1 @@ -0,0 +1,13 @@ +# Best-effort desktop notification. Uses BurntToast if installed, otherwise no-op. + +function Notify-Send-Result { + if (-not (Get-Module -ListAvailable -Name BurntToast -ErrorAction SilentlyContinue)) { return } + try { + Import-Module BurntToast -ErrorAction Stop + $errors = @($script:Summary | Where-Object { $_.Result -eq 'fail' }).Count + $total = @($script:Summary).Count + $msg = if ($errors -gt 0) { "Finished with $errors error(s)." } + else { "$total manager(s) updated." } + New-BurntToastNotification -Text 'eMerger', $msg -ErrorAction SilentlyContinue + } catch {} +} diff --git a/src/pslib/Packages.ps1 b/src/pslib/Packages.ps1 new file mode 100644 index 0000000..2a9ff91 --- /dev/null +++ b/src/pslib/Packages.ps1 @@ -0,0 +1,148 @@ +# Windows package manager registry and dispatcher. + +$script:PKG_MANAGERS = @( + 'winget','scoop','choco','wsl','PSWindowsUpdate' +) +$script:PKG_DEV = @('rustup','cargo','npm','pnpm','pip','gem') + +function Pkg-Need-Admin { + param([string]$M) + return @('choco','PSWindowsUpdate','wsl') -contains $M +} + +function Pkg-Detect { + param([string]$M) + switch ($M) { + 'winget' { return (Sys-Has winget) } + 'scoop' { return (Sys-Has scoop) } + 'choco' { return (Sys-Has choco) } + 'wsl' { return (Sys-Has wsl) } + 'PSWindowsUpdate' { return [bool](Get-Module -ListAvailable PSWindowsUpdate -ErrorAction SilentlyContinue) } + 'rustup' { return (Sys-Has rustup) } + 'cargo' { return (Sys-Has cargo) -and (Sys-Has cargo-install-update) } + 'npm' { return (Sys-Has npm) } + 'pnpm' { return (Sys-Has pnpm) } + 'pip' { return (Sys-Has pip) } + 'gem' { return (Sys-Has gem) } + default { return $false } + } +} + +function Pkg-Detect-All { + param([switch]$IncludeDev) + $out = @() + foreach ($m in $script:PKG_MANAGERS) { if (Pkg-Detect $m) { $out += $m } } + if ($IncludeDev) { foreach ($m in $script:PKG_DEV) { if (Pkg-Detect $m) { $out += $m } } } + return ,$out +} + +function Pkg-Need-Admin-Any { + param([switch]$IncludeDev) + $detected = Pkg-Detect-All -IncludeDev:$IncludeDev + foreach ($m in $detected) { if (Pkg-Need-Admin $m) { return $true } } + return $false +} + +function Pkg-Icon { + param([string]$M) + if (-not $script:UI_UNICODE) { return '*' } + switch ($M) { + 'winget' { '📦' } + 'scoop' { '🥄' } + 'choco' { '🍫' } + 'wsl' { '🐧' } + 'PSWindowsUpdate' { '🪟' } + 'rustup' { '🦀' } + 'cargo' { '🦀' } + 'npm' { '📗' } + 'pnpm' { '📗' } + 'pip' { '🐍' } + 'gem' { '💎' } + default { '*' } + } +} + +function Run-Cmd { + param([string]$Label, [scriptblock]$Block) + if ($script:ArgsGlobal.DryRun) { + UI-Sub "[dry-run] $Label" + return $true + } + if ($script:UI_VERBOSE) { + UI-Sub $Label + try { & $Block } catch { UI-Fail $Label 1; Log-Error "$Label : $_"; return $false } + if ($LASTEXITCODE -and $LASTEXITCODE -ne 0) { UI-Fail $Label $LASTEXITCODE; Log-Error "$Label rc=$LASTEXITCODE"; return $false } + UI-Done $Label + return $true + } + $tmp = [IO.Path]::GetTempFileName() + try { + & $Block *>$tmp + $rc = $LASTEXITCODE + if (-not $rc) { $rc = 0 } + } catch { + $rc = 1 + $_ | Out-File $tmp -Append + } + if ($rc -ne 0) { + UI-Fail $Label $rc + Log-Error "$Label rc=$rc" + Get-Content $tmp -Tail 15 -ErrorAction SilentlyContinue | ForEach-Object { + [Console]::Error.WriteLine(" $_") + } + Remove-Item $tmp -Force -ErrorAction SilentlyContinue + return $false + } + UI-Done $Label + Remove-Item $tmp -Force -ErrorAction SilentlyContinue + return $true +} + +function Pkg-Run { + param([string]$M) + $script:PKG_CURRENT = $M + $icon = Pkg-Icon $M + UI-Title "$icon $M" + Log-Info "starting $M" + $ok = $true + switch ($M) { + 'winget' { + $ok = (Run-Cmd 'winget source update' { winget source update --disable-interactivity *>$null; $global:LASTEXITCODE = 0 }) -and $ok + $ok = (Run-Cmd 'winget upgrade --all' { + winget upgrade --all --include-unknown --accept-package-agreements --accept-source-agreements --silent --disable-interactivity + if (-not $LASTEXITCODE) { $global:LASTEXITCODE = 0 } + }) -and $ok + } + 'scoop' { + $ok = (Run-Cmd 'scoop update' { scoop update }) -and $ok + $ok = (Run-Cmd 'scoop update *' { scoop update * }) -and $ok + $ok = (Run-Cmd 'scoop cleanup *' { scoop cleanup * }) -and $ok + $ok = (Run-Cmd 'scoop cache rm *' { scoop cache rm * }) -and $ok + } + 'choco' { + $ok = (Run-Cmd 'choco upgrade all' { choco upgrade all -y --limit-output }) -and $ok + } + 'wsl' { + $ok = (Run-Cmd 'wsl --update' { wsl --update }) -and $ok + } + 'PSWindowsUpdate' { + $ok = (Run-Cmd 'Windows Update' { + Import-Module PSWindowsUpdate -ErrorAction Stop + Get-WindowsUpdate -AcceptAll -Install -IgnoreReboot -Confirm:$false + }) -and $ok + } + 'rustup' { $ok = (Run-Cmd 'rustup update' { rustup update }) -and $ok } + 'cargo' { $ok = (Run-Cmd 'cargo install-update -a' { cargo install-update -a }) -and $ok } + 'npm' { $ok = (Run-Cmd 'npm -g update' { npm update -g }) -and $ok } + 'pnpm' { $ok = (Run-Cmd 'pnpm -g update' { pnpm -g update }) -and $ok } + 'pip' { $ok = (Run-Cmd 'pip upgrade outdated' { + pip list --outdated --format=json 2>$null | + ConvertFrom-Json | + ForEach-Object { pip install --user -U $_.name 2>$null } + }) -and $ok } + 'gem' { $ok = (Run-Cmd 'gem update' { gem update }) -and $ok } + } + $script:PKG_CURRENT = '' + if ($ok) { Log-Info "$M ok" } else { Log-Error "$M failed" } + return $ok +} diff --git a/src/pslib/Profiles.ps1 b/src/pslib/Profiles.ps1 new file mode 100644 index 0000000..368dba0 --- /dev/null +++ b/src/pslib/Profiles.ps1 @@ -0,0 +1,45 @@ +# Profiles: named *.ps1 files that preset $script:ArgsGlobal defaults. +# Search: +# 1) $EMERGER_CONFIG\profiles.d\.ps1 (user) +# 2) $EMERGER_ROOT\share\profiles\.ps1 (shipped) + +function Load-Profile { + param([string]$Name) + if (-not $Name) { return } + if ($Name -notmatch '^[A-Za-z0-9._-]+$') { + [Console]::Error.WriteLine("Invalid profile name: '$Name' (allowed: letters, digits, dot, dash, underscore)") + exit 2 + } + $candidates = @( + (Join-Path $script:EMERGER_CONFIG "profiles.d\$Name.ps1"), + (Join-Path $script:EMERGER_ROOT "share\profiles\$Name.ps1") + ) + foreach ($f in $candidates) { + if (Test-Path -LiteralPath $f) { + . $f + Log-Info "profile loaded: $Name ($f)" + return + } + } + [Console]::Error.WriteLine("Profile '$Name' not found. Looked in:") + $candidates | ForEach-Object { [Console]::Error.WriteLine(" $_") } + exit 2 +} + +function List-Profiles { + UI-Title 'Available profiles' + $seen = @{} + foreach ($d in @((Join-Path $script:EMERGER_CONFIG 'profiles.d'), + (Join-Path $script:EMERGER_ROOT 'share\profiles'))) { + if (-not (Test-Path $d)) { continue } + Get-ChildItem $d -Filter '*.ps1' -ErrorAction SilentlyContinue | ForEach-Object { + $n = $_.BaseName + if ($seen.ContainsKey($n)) { return } + $seen[$n] = $true + $descLine = Select-String -Path $_.FullName -Pattern '^# description:' -ErrorAction SilentlyContinue | Select-Object -First 1 + $desc = '' + if ($descLine) { $desc = $descLine.Line -replace '^# description:\s*','' } + Write-Host " $(UI-Color cyan $n) $(UI-Color gray $desc)" + } + } +} diff --git a/src/pslib/Summary.ps1 b/src/pslib/Summary.ps1 new file mode 100644 index 0000000..f50b0a6 --- /dev/null +++ b/src/pslib/Summary.ps1 @@ -0,0 +1,130 @@ +# Final summary box, history persistence, errors/history viewers. + +$script:SUMMARY_FREED_MB = 0 + +function Summary-Json { + param([int]$Duration) + $obj = [pscustomobject]@{ + ts = (Get-Date).ToUniversalTime().ToString('yyyy-MM-ddTHH:mm:ssZ') + duration = $Duration + errors = @($script:Summary | Where-Object { $_.Result -eq 'fail' }).Count + freed_mb = $script:SUMMARY_FREED_MB + reboot = [int](Reboot-Pending) + managers = @($script:Summary | ForEach-Object { [pscustomobject]@{ name = $_.Name; result = $_.Result } }) + } + $obj | ConvertTo-Json -Compress -Depth 5 +} + +function Summary-Print { + param([int]$Duration) + if ($script:ArgsGlobal -and $script:ArgsGlobal.Json) { + Summary-Json $Duration + _Persist-History $Duration + return + } + if ($script:QUIET_LEVEL -ge 3) { return } + + $min = [int]($Duration / 60) + $sec = $Duration % 60 + + $okCount = @($script:Summary | Where-Object { $_.Result -eq 'ok' }).Count + $failCount = @($script:Summary | Where-Object { $_.Result -eq 'fail' }).Count + + if ($script:QUIET_LEVEL -ge 2) { + if ($failCount -gt 0) { + Write-Host "$okCount/$($okCount+$failCount) managers ok, $failCount error(s), ${min}m${sec}s" + } else { + Write-Host "$okCount managers ok, ${min}m${sec}s" + } + _Persist-History $Duration + return + } + + $mgrLine = '' + foreach ($r in $script:Summary) { + if ($r.Result -eq 'ok') { $mgrLine += "$(UI-Color green (UI-Glyph check)) $($r.Name) " } + else { $mgrLine += "$(UI-Color red (UI-Glyph cross)) $($r.Name) " } + } + + $lines = @() + if ($mgrLine) { $lines += $mgrLine; $lines += '' } + $lines += "duration: ${min}m${sec}s" + if ($script:SUMMARY_FREED_MB -gt 0) { + $lines += ("freed: {0} MB" -f $script:SUMMARY_FREED_MB) + } + if ($failCount -gt 0) { + $lines += (UI-Color yellow "$failCount error(s) - up --errors") + } else { + $lines += (UI-Color green 'no errors') + } + + UI-Box 'eMerger summary' $lines + _Persist-History $Duration + Reboot-Advisory +} + +function _Persist-History { + param([int]$Duration) + $hist = Join-Path $script:EMERGER_STATE 'history.jsonl' + $obj = [pscustomobject]@{ + ts = (Get-Date).ToUniversalTime().ToString('yyyy-MM-ddTHH:mm:ssZ') + duration = $Duration + errors = @($script:Summary | Where-Object { $_.Result -eq 'fail' }).Count + freed_mb = $script:SUMMARY_FREED_MB + reboot = [int](Reboot-Pending) + managers = @($script:Summary | ForEach-Object { [pscustomobject]@{ name = $_.Name; result = $_.Result } }) + } + try { + $line = $obj | ConvertTo-Json -Compress -Depth 5 + Add-Content -Path $hist -Value $line -ErrorAction Stop + # rotate + $count = (Get-Content $hist | Measure-Object).Count + if ($count -gt 500) { Get-Content $hist -Tail 500 | Set-Content $hist } + } catch {} +} + +function Reboot-Pending { + # Several signals can indicate a pending reboot on Windows. + $keys = @( + 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Component Based Servicing\RebootPending', + 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update\RebootRequired', + 'HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager\PendingFileRenameOperations' + ) + foreach ($k in $keys) { + if (Test-Path $k) { return $true } + } + return $false +} + +function Reboot-Advisory { + if (Reboot-Pending) { + Write-Host ("`n $(UI-Color yellow (UI-Glyph warn)) $(UI-Color yellow 'REBOOT RECOMMENDED') $(UI-Color gray '(pending updates require restart)')") + Write-Host (" $(UI-Color gray 'run:') Restart-Computer") + } +} + +function Show-Errors { + $log = Join-Path $script:EMERGER_STATE 'emerger.log' + if (-not (Test-Path $log)) { UI-Ok 'no log yet'; return } + $errs = @(Select-String -Path $log -Pattern '\|ERROR\|' -ErrorAction SilentlyContinue) + if ($errs.Count -eq 0) { UI-Ok 'no errors logged'; return } + UI-Warn "$($errs.Count) error line(s):" + $errs | Select-Object -Last 30 | ForEach-Object { Write-Host " $($_.Line)" } +} + +function Show-History { + $hist = Join-Path $script:EMERGER_STATE 'history.jsonl' + if (-not (Test-Path $hist)) { UI-Muted 'no history yet'; return } + UI-Title 'Recent runs' + Get-Content $hist -Tail 10 | ForEach-Object { + try { + $o = $_ | ConvertFrom-Json + $reboot = if ($o.reboot -eq 1) { ' ' + (UI-Color yellow 'reboot') } else { '' } + if ($o.errors -gt 0) { + Write-Host " $(UI-Color red (UI-Glyph cross)) $($o.ts) $($o.duration)s $(UI-Color yellow "errors=$($o.errors)")$reboot" + } else { + Write-Host " $(UI-Color green (UI-Glyph check)) $($o.ts) $($o.duration)s$reboot" + } + } catch {} + } +} diff --git a/src/pslib/Sys.ps1 b/src/pslib/Sys.ps1 new file mode 100644 index 0000000..5cf0d5e --- /dev/null +++ b/src/pslib/Sys.ps1 @@ -0,0 +1,55 @@ +# Platform helpers. + +function Sys-Has { + param([string]$Cmd) + return [bool](Get-Command $Cmd -ErrorAction SilentlyContinue) +} + +function Sys-OS { + $os = [Environment]::OSVersion + "Windows $($os.Version)" +} + +function Sys-Arch { return $env:PROCESSOR_ARCHITECTURE } + +function Sys-IsAdmin { + try { + $id = [Security.Principal.WindowsIdentity]::GetCurrent() + $p = [Security.Principal.WindowsPrincipal]::new($id) + return $p.IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator) + } catch { + return $false + } +} + +function Sys-Start-Elevated { + param([string]$ScriptPath, [string[]]$Arguments) + $argStr = ($Arguments | ForEach-Object { if ($_ -match '\s') { '"' + $_ + '"' } else { $_ } }) -join ' ' + Start-Process -FilePath 'powershell' ` + -ArgumentList "-NoProfile", "-ExecutionPolicy", "Bypass", "-File", "`"$ScriptPath`"", $argStr ` + -Verb RunAs -Wait +} + +function Sys-On-Battery { + try { + $b = Get-CimInstance -ClassName Win32_Battery -ErrorAction SilentlyContinue + if ($b -and $b.BatteryStatus -eq 1) { return $true } + } catch {} + return $false +} + +function Sys-Battery-Percent { + try { + $b = Get-CimInstance -ClassName Win32_Battery -ErrorAction SilentlyContinue + if ($b) { return [int]$b.EstimatedChargeRemaining } + } catch {} + return 100 +} + +function Sys-Disk-Free-GB { + param([string]$Drive = 'C') + try { + $d = Get-PSDrive $Drive -ErrorAction Stop + return [math]::Round($d.Free / 1GB, 1) + } catch { return 0 } +} diff --git a/src/pslib/UI.ps1 b/src/pslib/UI.ps1 new file mode 100644 index 0000000..a91c985 --- /dev/null +++ b/src/pslib/UI.ps1 @@ -0,0 +1,115 @@ +# eMerger Windows UI helpers: colors, glyphs, box, step, spinner. +# Stays in script scope; all state is kept on $script:. + +$script:UI_COLOR = $true +if ($env:NO_COLOR) { $script:UI_COLOR = $false } +try { if ([Console]::IsOutputRedirected) { $script:UI_COLOR = $false } } catch {} + +$script:UI_UNICODE = -not [bool]$env:EMERGER_NO_EMOJI +$script:QUIET_LEVEL = 0 +$script:UI_VERBOSE = $false + +function UI-Color { + param([string]$Color, [string]$Text) + if (-not $script:UI_COLOR) { return $Text } + $esc = [char]27 + $map = @{ red=91; green=92; yellow=93; blue=94; magenta=95; cyan=96; gray=90; bold=1; dim=2 } + $c = $map[$Color] + if (-not $c) { return $Text } + return "$esc[${c}m$Text$esc[0m" +} + +function UI-Glyph { + param([string]$Name) + if ($script:UI_UNICODE) { + switch ($Name) { + 'check' { '✔' } + 'cross' { '✖' } + 'arrow' { '▶' } + 'info' { 'ℹ' } + 'warn' { '⚠' } + 'dot' { '·' } + 'bullet' { '•' } + default { '*' } + } + } else { + switch ($Name) { + 'check' { '[OK]' } + 'cross' { '[X]' } + 'arrow' { '>' } + 'info' { 'i' } + 'warn' { '!' } + 'dot' { '.' } + 'bullet' { '*' } + default { '*' } + } + } +} + +function UI-Width { + try { $w = [Console]::WindowWidth } catch { $w = 80 } + if ($w -lt 20) { $w = 80 } + if ($w -gt 80) { return 80 } + return $w +} + +function UI-Hr { + if ($script:QUIET_LEVEL -ge 2) { return } + $w = UI-Width + Write-Host (UI-Color gray ('─' * $w)) +} + +function UI-Title { + param([string]$Text) + if ($script:QUIET_LEVEL -ge 2) { return } + Write-Host "" + Write-Host ("$(UI-Color cyan (UI-Glyph arrow)) $(UI-Color cyan (UI-Color bold $Text))") + UI-Hr +} + +function UI-Info { param([string]$T) if ($script:QUIET_LEVEL -lt 2) { Write-Host " $(UI-Color blue (UI-Glyph info)) $T" } } +function UI-Ok { param([string]$T) if ($script:QUIET_LEVEL -lt 2) { Write-Host " $(UI-Color green (UI-Glyph check)) $T" } } +function UI-Warn { param([string]$T) Write-Host " $(UI-Color yellow (UI-Glyph warn)) $T" } +function UI-Err { param([string]$T) [Console]::Error.WriteLine(" $(UI-Color red (UI-Glyph cross)) $T") } +function UI-Muted { param([string]$T) if ($script:QUIET_LEVEL -lt 1) { Write-Host (UI-Color gray " $T") } } +function UI-Sub { param([string]$T) if ($script:QUIET_LEVEL -lt 1) { Write-Host " $(UI-Color gray (UI-Glyph dot)) $T" } } +function UI-Done { param([string]$T) if ($script:QUIET_LEVEL -lt 2) { Write-Host " $(UI-Color green (UI-Glyph check)) $T" } } +function UI-Fail { param([string]$T,[int]$Rc=1) Write-Host " $(UI-Color red (UI-Glyph cross)) $T $(UI-Color gray "(rc=$Rc)")" } + +function UI-Step { + param([int]$I,[int]$N,[string]$Text) + if ($script:QUIET_LEVEL -ge 2) { return } + Write-Host "" + Write-Host "$(UI-Color magenta "[$I/$N]") $(UI-Color bold $Text)" +} + +function UI-Logo { + param([string]$Path) + if ($script:QUIET_LEVEL -ge 1) { return } + if (-not (Test-Path $Path)) { return } + if ((UI-Width) -lt 60) { return } + Write-Host (UI-Color cyan (Get-Content $Path -Raw)) +} + +function UI-Box { + param([string]$Title, [string[]]$Lines) + if ($script:QUIET_LEVEL -ge 3) { return } + $strip = { param($s) [regex]::Replace($s, "`e\[[0-9;]*[a-zA-Z]", '') } + $maxlen = $Title.Length + foreach ($l in $Lines) { + $len = (& $strip $l).Length + if ($len -gt $maxlen) { $maxlen = $len } + } + if ($maxlen -lt 30) { $maxlen = 30 } + $bar = '─' * ($maxlen + 2) + Write-Host "" + Write-Host " $(UI-Color cyan "╭$bar╮")" + Write-Host (" $(UI-Color cyan '│') " + (UI-Color bold ($Title.PadRight($maxlen))) + " $(UI-Color cyan '│')") + Write-Host " $(UI-Color cyan "│$bar│")" + foreach ($l in $Lines) { + $stripped = & $strip $l + $pad = ' ' * ($maxlen - $stripped.Length) + Write-Host (" $(UI-Color cyan '│') $l$pad $(UI-Color cyan '│')") + } + Write-Host " $(UI-Color cyan "╰$bar╯")" +} diff --git a/src/pslib/Update.ps1 b/src/pslib/Update.ps1 new file mode 100644 index 0000000..c31badc --- /dev/null +++ b/src/pslib/Update.ps1 @@ -0,0 +1,54 @@ +# Self-update (git) and auto-update (Task Scheduler). + +function Self-Update { + param([string]$Root) + UI-Title 'Self-update' + if (-not (Test-Path (Join-Path $Root '.git'))) { + UI-Err 'Not a git checkout. Re-clone from https://github.com/MasterCruelty/eMerger' + return 1 + } + if (-not (Sys-Has git)) { UI-Err 'git not installed'; return 1 } + if ($script:ArgsGlobal.DryRun) { UI-Sub "[dry-run] git -C `"$Root`" pull --ff-only"; return 0 } + $before = (& git -C $Root rev-parse HEAD 2>$null).Trim() + & git -C $Root fetch --quiet 2>$null + & git -C $Root pull --ff-only --quiet 2>$null + if ($LASTEXITCODE -ne 0) { + UI-Err 'git pull failed (non fast-forward?)' + return 1 + } + $after = (& git -C $Root rev-parse HEAD 2>$null).Trim() + if ($before -eq $after) { + UI-Ok 'Already up to date.' + } else { + UI-Ok ("Updated {0}..{1}" -f $before.Substring(0, [math]::Min(7,$before.Length)), $after.Substring(0, [math]::Min(7,$after.Length))) + & git -C $Root log --oneline "$before..$after" | ForEach-Object { Write-Host " $(UI-Color gray (UI-Glyph dot)) $_" } + } + return 0 +} + +function Setup-Task { + param([string]$Root) + UI-Title 'Auto-update (Task Scheduler)' + if ($script:ArgsGlobal.DryRun) { UI-Sub '[dry-run] would register scheduled task'; return 0 } + $entry = Join-Path $Root 'src\emerger.ps1' + try { + $action = New-ScheduledTaskAction ` + -Execute 'powershell' ` + -Argument "-NoProfile -WindowStyle Hidden -ExecutionPolicy Bypass -File `"$entry`" -y -q -nl -ni" + $trigger = New-ScheduledTaskTrigger -Weekly -DaysOfWeek Sunday -At '10:00' + $settings = New-ScheduledTaskSettingsSet ` + -StartWhenAvailable ` + -RunOnlyIfNetworkAvailable ` + -RandomDelay (New-TimeSpan -Hours 1) ` + -DontStopOnIdleEnd + $principal = New-ScheduledTaskPrincipal -UserId $env:USERNAME -LogonType Interactive + Register-ScheduledTask -TaskName 'eMerger' -Action $action -Trigger $trigger -Settings $settings -Principal $principal ` + -Description 'Weekly eMerger update' -Force | Out-Null + UI-Ok "Scheduled task 'eMerger' created (weekly, Sunday 10:00, ±1h delay)" + UI-Muted "Manage with: Get-ScheduledTask eMerger | Select-Object State,LastRunTime" + return 0 + } catch { + UI-Err "Failed to register task: $($_.Exception.Message)" + return 1 + } +} diff --git a/src/test/argument_check.sh b/src/test/argument_check.sh deleted file mode 100755 index 02e5bda..0000000 --- a/src/test/argument_check.sh +++ /dev/null @@ -1,29 +0,0 @@ -#!/bin/bash - -CONTAIN=0 -ARGS=( - "-help" - "-au" - "-err" - "-ni" - "-nl" - "-nt" - "-rc" - "-up" - "-w" - "-xyzzy" -) - -for ARGU in $@; do - if [[ ${ARGS[*]} =~ $ARGU ]]; then - CONTAIN=1 - else - CONTAIN=0 - break - fi -done - -if [[ $CONTAIN != 1 ]]; then - puts NC "No such command, try \"up -help\"\n" - exit 1 -fi diff --git a/src/test/integrity_check.sh b/src/test/integrity_check.sh deleted file mode 100755 index b656ec0..0000000 --- a/src/test/integrity_check.sh +++ /dev/null @@ -1,71 +0,0 @@ -#!/bin/bash - -# REF looks for where the file has been executed -# If the script is updated by the cronjob, it contains an argument $1 -# If the script is executed from `test/`, then no PAD is added -# If the script is executed from '.setup.sh', then it needs to know the PAD -SRC="" -if [[ $1 != "" ]]; then - SRC="$1src" -else - REF=$(dirname "$(readlink -f ../$0)") - PAD="" - if [[ $REF != *"/eMerger/src" ]]; then - PAD="/eMerger/src" - fi - SRC="$(cat $REF$PAD/utils/.cache | head -n 1)/src" -fi - -# check global.sh existence (puts is there) -if [[ -f $SRC/utils/global.sh ]]; then - source $SRC/utils/global.sh -else - puts RED "\n$SRC/utils/global.sh is missing: aborting script\n" - exit 1 -fi - -# check ./src/emerger.sh existence -if [[ -f "$SRC/emerger.sh" ]]; then - true -else - puts NC "emerger.sh is missing: aborting script\n" - exit 1 -fi - -LIST=$SRC/test/list/ - -# check existence of ./src/utils/* -puts RED "\ncheck ./src/utils/*: starting" -while read LINE; do - if [[ -f "$SRC/utils/$LINE" && $LINE != "" ]]; then - puts LOGO "passed\t$LINE $NORMAL$GREEN$CHECKMARK" - else - puts RED "$SRC/utils/$LINE is missing: aborting script $CROSSMARK" - exit 1 - fi -done < $LIST.utils -puts GREEN "check ./src/utils/*: completed" - -# check existence of ./src/package/* -puts RED "check ./src/package/*: starting" -while read LINE; do - if [[ -f "$SRC/package/$LINE" && $LINE != "" ]]; then - puts LOGO "passed\t$LINE $NORMAL$GREEN$CHECKMARK" - else - puts RED "$SRC/package/$LINE is missing: aborting script $CROSSMARK" - exit 1 - fi -done < $LIST.packages -puts GREEN "check ./src/package/*: completed" - -# check existence of ./src/test/* -puts RED "check ./src/test/*: starting" -while read LINE; do - if [[ -f "$SRC/test/$LINE" && $LINE != "" ]]; then - puts LOGO "passed\t$LINE $NORMAL$GREEN$CHECKMARK" - else - puts RED "$LINE is missing: aborting script $CROSSMARK" - exit 1 - fi -done < $LIST.tests -puts GREEN "check ./src/test/*: completed\n" diff --git a/src/test/list/.packages b/src/test/list/.packages deleted file mode 100644 index 6ef3924..0000000 --- a/src/test/list/.packages +++ /dev/null @@ -1,9 +0,0 @@ -arch.sh -debian.sh -flatpak.sh -gentoo.sh -nix.sh -opensuse.sh -rpm.sh -snap.sh -termux.sh diff --git a/src/test/list/.tests b/src/test/list/.tests deleted file mode 100644 index 35b87a9..0000000 --- a/src/test/list/.tests +++ /dev/null @@ -1 +0,0 @@ -argument_check.sh diff --git a/src/test/list/.utils b/src/test/list/.utils deleted file mode 100644 index 9461721..0000000 --- a/src/test/list/.utils +++ /dev/null @@ -1,7 +0,0 @@ -cache_gen.sh -cache.sh -check_pwr.sh -global.sh -help -privileges.sh -trash.sh diff --git a/src/utils/.logo b/src/utils/.logo deleted file mode 100644 index 78ecb0c..0000000 --- a/src/utils/.logo +++ /dev/null @@ -1,15 +0,0 @@ - - $$\ $$\ - $$$\ $$$ | - $$$$$$\ $$$$\ $$$$ | $$$$$$\ $$$$$$\ $$$$$$\ $$$$$$\ $$$$$$\ - $$ __$$\ $$\$$\$$ $$ |$$ __$$\ $$ __$$\ $$ __$$\ $$ __$$\ $$ __$$\ - $$$$$$$$ |$$ \$$$ $$ |$$$$$$$$ |$$ | \__|$$ / $$ |$$$$$$$$ |$$ | \__| - $$ ____|$$ |\$ /$$ |$$ ____|$$ | $$ | $$ |$$ ____|$$ | - \$$$$$$$\ $$ | \_/ $$ |\$$$$$$$\ $$ | \$$$$$$$ |\$$$$$$$\ $$ | - \_______|\__| \__| \_______|\__| \____$$ | \_______|\__| - $$\ $$ | - \$$$$$$ | - \______/ - -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -MIT License diff --git a/src/utils/cache.sh b/src/utils/cache.sh deleted file mode 100755 index d80e342..0000000 --- a/src/utils/cache.sh +++ /dev/null @@ -1,19 +0,0 @@ -#!/bin/bash - -source $(dirname "$(readlink -f "$0")")/utils/global.sh - -if [[ -d ~/.cache ]]; then - puts RED "Showing files in .cache $TRASH" - du -sh ~/.cache - ls -Al ~/.cache | tail -n +2 - puts NC "Should I clean caches? " - read -p "[Y/n]: " ANSW - if [[ $ANSW == "n" ]]; then - puts RED "Caches: not cleaned" - else - rm -rf ~/.cache* - puts GREEN "Caches: cleaned" - fi -else - puts GREEN "Caches are empty, nothing to clean" -fi diff --git a/src/utils/cache_gen.sh b/src/utils/cache_gen.sh deleted file mode 100755 index c2b5600..0000000 --- a/src/utils/cache_gen.sh +++ /dev/null @@ -1,64 +0,0 @@ -#!/bin/bash - -### generates default caches ### - -# path -OUT="$(pwd | awk -F 'eMerger/src/utils' '{print $1}')\n" - -# check for first available terminal -declare -a TERMINAL -TERMINAL=( - "xfce4-terminal" - "xterm" - "konsole" - "terminator" - "lxterminal" - "gnome-terminal" -) - -# this flag goes to 1 if we have a known terminal -FLAG=0 -for i in ${TERMINAL[@]}; do - if [[ $(command -v $i) ]]; then - OUT+="$i\n" - FLAG=1 - break - fi -done - -if [[ $FLAG -eq 0 ]]; then - OUT+="unknown\n" -fi - -# package managers dictionary -declare -A PKG -PKG=( - ["pacman"]="arch" - ["apt-get"]="debian" - ["flatpak"]="flatpak" - ["emerge"]="gentoo" - ["nixos-rebuild"]="nix" - ["zypper"]="opensuse" - ["rpm"]="rpm" - ["snap"]="snap" - ["pkg"]="termux" -) - -# check for privileges -if [[ $(command -v pkg) ]]; then - : -else - OUT+="utils/privileges\n" -fi - -# check for available package manager -for i in ${!PKG[@]}; do - if [[ $(command -v $i) ]]; then - OUT+="package/${PKG[$i]}\n" - fi -done - -OUT+="utils/cache\n" -OUT+="utils/trash" - -echo -e "$OUT" diff --git a/src/utils/check_pwr.sh b/src/utils/check_pwr.sh deleted file mode 100755 index 755810d..0000000 --- a/src/utils/check_pwr.sh +++ /dev/null @@ -1,8 +0,0 @@ -#!/bin/bash - -PWR="" -if [[ $(grep -c "utils/privileges" $(dirname "$(readlink -f "$0")")/utils/.cache) -gt 0 ]]; then - PWR="sudo" -fi - -echo "$PWR" \ No newline at end of file diff --git a/src/utils/global.sh b/src/utils/global.sh deleted file mode 100755 index 0e36fa3..0000000 --- a/src/utils/global.sh +++ /dev/null @@ -1,65 +0,0 @@ -#!/bin/bash - -# Colors -BLUE="\e[1;34;49m" -GREEN="\e[1;32;49m" -LOGO="\e[2;37;49m" -NORMAL="\e[0m" -RED="\e[1;91;49m" - -# Emojis -ARCH="\U0001F3F9" -CHECKMARK="\U00002714" -COOL="\U0001F60E" -CROSSMARK="\U0000274C" -DEBIAN="\U0001F300" -FLATPAK="\U0001F4E6" -GENTOO="\U0001F427" -NIX="\U00002744" -MONOCLE="\U0001F9D0" -OPENSUSE="\U0001F98E" -RPM="\U0001F920" -SAD="\U0001F622" -SCROLL="\U0001F4DC" -SNAP="\U0001F9A2" -TERMUX="\U0001F916" -TRASH="\U0001F4A9" -WHALE="\U0001F40B" - -# Argument $1 is color, argument $2 is text -function puts() { - case $1 in - BLUE) - printf "$BLUE$2$NORMAL\n" - ;; - GREEN) - echo "$GREEN$2$NORMAL" >> $SRC/.hist - HIST=$(cat $SRC/.hist) - clear - printf "$GREEN$HIST$NORMAL\n" - ;; - LOGO) - printf "$LOGO$2$NORMAL\n" - ;; - NC) - printf "$2\n" - ;; - RED) - printf "$RED$2$NORMAL\n" - ;; - *) - printf "$2\n" - ;; - esac -} - -# Execute and stops in case it fails -# DO NOT ADD [ ... ] brackets -function try() { - if $@; then - continue - else - puts RED "STOPPED AT '$(for i in "$@"; do echo -n "$i "; done)'" - exit 1 - fi -} diff --git a/src/utils/help b/src/utils/help deleted file mode 100644 index bbf2c89..0000000 --- a/src/utils/help +++ /dev/null @@ -1,10 +0,0 @@ --help Shows this help - --err Shows errors (ERRors) --nc Skips cache cleaning. (No Cache) --ni Skips system informations. (No Infos) --nl Skips logo. (No Logo) --nt Skips trash cleaning. (No Trash) --rc Recreate caches (Recreate Cache) --up Updates the updater (UPdate) --w Shows weather under logo. (Weather) diff --git a/src/utils/privileges.sh b/src/utils/privileges.sh deleted file mode 100755 index c5a61dd..0000000 --- a/src/utils/privileges.sh +++ /dev/null @@ -1,12 +0,0 @@ -#!/bin/bash - -source $(dirname "$(readlink -f "$0")")/utils/global.sh - -puts RED "\nChecking for sudo privileges $MONOCLE" -sudo -v >/dev/null 2>&1 -if [[ $(echo $?) -eq 0 ]]; then - puts GREEN "Access granted\n" -else - puts RED "Can't access: aborting script\n" - exit 1 -fi diff --git a/src/utils/trash.sh b/src/utils/trash.sh deleted file mode 100755 index 87e4bf0..0000000 --- a/src/utils/trash.sh +++ /dev/null @@ -1,19 +0,0 @@ -#!/bin/bash - -source $(dirname "$(readlink -f "$0")")/utils/global.sh - -if [[ -d ~/.local/share/Trash/files ]]; then - puts RED "Showing files in .local/share/Trash/files $TRASH" - du -sh ~/.local/share/Trash/files - ls -Al ~/.local/share/Trash/files | tail -n +2 - puts NC "Should I clean Trash? " - read -p "[Y/n]: " ANSW - if [[ $ANSW == "n" ]]; then - puts RED "Trash: not cleaned" - else - rm -rf ~/.local/share/Trash/* - puts GREEN "Trash: cleaned" - fi -else - puts GREEN "Trash is empty, nothing to clean" -fi diff --git a/tests/emerger.bats b/tests/emerger.bats new file mode 100644 index 0000000..50b9d26 --- /dev/null +++ b/tests/emerger.bats @@ -0,0 +1,91 @@ +#!/usr/bin/env bats + +setup() { + export REPO_DIR="${BATS_TEST_DIRNAME}/.." + export EMERGER="bash $REPO_DIR/src/emerger.sh" + export HOME_BAK="$HOME" + export HOME="$(mktemp -d)" + export XDG_CACHE_HOME="$HOME/.cache" + export XDG_CONFIG_HOME="$HOME/.config" + export XDG_STATE_HOME="$HOME/.local/state" + export NO_COLOR=1 + mkdir -p "$XDG_CACHE_HOME" "$XDG_CONFIG_HOME" "$XDG_STATE_HOME" +} + +teardown() { + rm -rf "$HOME" + export HOME="$HOME_BAK" +} + +@test "help exits 0 and mentions USAGE" { + run $EMERGER --help + [ "$status" -eq 0 ] + [[ "$output" == *"USAGE"* ]] +} + +@test "version prints version string" { + run $EMERGER --version + [ "$status" -eq 0 ] + [[ "$output" == *"eMerger"* ]] +} + +@test "unknown flag fails with exit code 2" { + run $EMERGER --totally-bogus + [ "$status" -eq 2 ] +} + +@test "short no-logo flag is parsed correctly (not as -n)" { + run $EMERGER --help -nl + [ "$status" -eq 0 ] +} + +@test "errors shows ok on empty log" { + run $EMERGER --errors + [ "$status" -eq 0 ] +} + +@test "history shows placeholder when empty" { + run $EMERGER --history + [ "$status" -eq 0 ] +} + +@test "dry-run completes without sudo" { + run $EMERGER -n -y -nl -ni -nc -nt -q + [ "$status" -eq 0 ] +} + +@test "short flag bundling: -nv is accepted" { + run $EMERGER -nv -y -nl -ni -nc -nt -q + [ "$status" -eq 0 ] +} + +@test "json mode emits a single json object on stdout" { + run $EMERGER -n -y --json + [ "$status" -eq 0 ] + [[ "$output" == *'"managers":'* ]] + [[ "$output" == *'"errors":'* ]] +} + +@test "--only filter restricts managers" { + run $EMERGER -n -y --json --only apt + [ "$status" -eq 0 ] + [[ "$output" == *'"apt"'* ]] + [[ "$output" != *'"snap"'* ]] +} + +@test "--except filter skips managers" { + run $EMERGER -n -y --json --except snap + [ "$status" -eq 0 ] + [[ "$output" != *'"snap"'* ]] +} + +@test "--metrics refuses with empty history" { + run $EMERGER --metrics "$HOME/out.prom" + # Either exits non-zero or writes the file; both behaviors are fine here. + [ "$status" -eq 0 ] || [ "$status" -eq 1 ] +} + +@test "unknown long flag still fails with exit code 2" { + run $EMERGER --no-such-flag + [ "$status" -eq 2 ] +} diff --git a/uninstall.ps1 b/uninstall.ps1 new file mode 100644 index 0000000..43ed77f --- /dev/null +++ b/uninstall.ps1 @@ -0,0 +1,45 @@ +#Requires -Version 5.1 +<# +.SYNOPSIS + Remove the eMerger Windows integration: `up` function, scheduled task. + Config and state under %APPDATA%\emerger and %LOCALAPPDATA%\emerger are kept. +#> +[CmdletBinding()] +param() + +$ErrorActionPreference = 'Stop' +$REPO = Split-Path -Parent $PSCommandPath +. "$REPO\src\pslib\UI.ps1" + +UI-Title 'eMerger uninstall (Windows)' + +$profilePath = $PROFILE.CurrentUserAllHosts +if (Test-Path $profilePath) { + $content = Get-Content $profilePath + if ($content -match 'emerger\.ps1') { + $filtered = $content | Where-Object { + $_ -notmatch 'emerger\.ps1' -and + $_ -notmatch '^# eMerger\b' -and + $_ -notmatch '^\s*function\s+up\s*\{' + } + $filtered | Set-Content $profilePath -Encoding UTF8 + UI-Ok "Cleaned $profilePath" + } else { + UI-Muted "No eMerger entry in $profilePath" + } +} + +# Scheduled task. +try { + $t = Get-ScheduledTask -TaskName 'eMerger' -ErrorAction Stop + if ($t) { + Unregister-ScheduledTask -TaskName 'eMerger' -Confirm:$false + UI-Ok "Removed scheduled task 'eMerger'" + } +} catch {} + +UI-Muted "Config kept at: $env:APPDATA\emerger\" +UI-Muted "State kept at: $env:LOCALAPPDATA\emerger\" +UI-Muted "Delete manually if you want a truly clean wipe." + +UI-Ok "Uninstall complete. Repo still at $REPO." diff --git a/uninstall.sh b/uninstall.sh index 9ea4f43..10522b9 100755 --- a/uninstall.sh +++ b/uninstall.sh @@ -1,37 +1,42 @@ -#!/bin/bash - -source src/utils/global.sh 2>>.log - -if [[ $(grep -c "alias up=" ~/.bashrc) -lt 1 ]]; then - puts GREEN "Nothing to uninstall $CHECKMARK" - exit 0 +#!/usr/bin/env bash +set -Eeuo pipefail + +REPO_DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) + +# shellcheck source=src/lib/ui.sh +source "$REPO_DIR/src/lib/ui.sh" +# shellcheck source=src/lib/sys.sh +source "$REPO_DIR/src/lib/sys.sh" + +ui_title "eMerger uninstall" + +removed_any=0 +for rc in "$HOME/.bashrc" "${ZDOTDIR:-$HOME}/.zshrc" "$HOME/.config/fish/config.fish"; do + [[ -f $rc ]] || continue + if grep -q "emerger.sh" "$rc"; then + sed -i.bak '/emerger\.sh/d;/# eMerger/d' "$rc" + rm -f "$rc.bak" + ui_ok "Cleaned $rc" + removed_any=1 + fi +done +(( removed_any )) || ui_muted "No shell rc entries found." + +if sys_has crontab && crontab -l 2>/dev/null | grep -q "emerger.sh"; then + crontab -l 2>/dev/null | grep -v "emerger.sh" | crontab - + ui_ok "Removed cronjob" fi -puts RED "Uninstall: starting" -sed -i "/alias up=/d" ~/.bashrc 2>>.log -puts LOGO "Alias 'up' removed" - -# Get favourite terminal -TERMINAL=$(cat src/utils/.cache | head -n 2 | tail -n 1) - -# Remove cronjob, if it exists (and if the user can) -if [[ $(grep -c "utils/privileges" $(dirname "$(readlink -f "$0")")/src/utils/.cache) -gt 0 && $(crontab -l | grep -c "eMerger/update.sh") -gt 0 ]]; then - sudo crontab -u $USER -l | grep -v "eMerger/update.sh" | sudo crontab -u $USER - - puts LOGO "Cronjob successfully removed" +if sys_has systemctl && systemctl --user list-unit-files 2>/dev/null | grep -q emerger; then + systemctl --user disable --now emerger.timer 2>/dev/null || true + rm -f "$HOME/.config/systemd/user/emerger.service" "$HOME/.config/systemd/user/emerger.timer" + systemctl --user daemon-reload 2>/dev/null || true + ui_ok "Removed systemd user timer" fi -# Remove .cache and .md5 -rm -f src/utils/.cache 2>>.log -rm -f src/utils/.md5 2>>.log - -puts GREEN "Uninstall: completed $SAD" +ui_muted "State and config kept at:" +ui_muted " ${XDG_CONFIG_HOME:-$HOME/.config}/emerger/" +ui_muted " ${XDG_STATE_HOME:-$HOME/.local/state}/emerger/" +ui_muted "Remove manually if you want them gone." -if [[ $TERMINAL == "unknown" ]]; then - exec bash - exit 0 -else - read -p "$(echo -e ${RED}Press enter, this process will be killed${NORMAL})" - - $TERMINAL 2>>.log - kill -9 $PPID -fi +ui_ok "Uninstall complete. Repo still at $REPO_DIR." diff --git a/update.ps1 b/update.ps1 new file mode 100644 index 0000000..65db7bf --- /dev/null +++ b/update.ps1 @@ -0,0 +1,5 @@ +#Requires -Version 5.1 +# Thin wrapper for `up --self-update`. +param([Parameter(ValueFromRemainingArguments = $true)][string[]]$Arguments) +$REPO = Split-Path -Parent $PSCommandPath +& "$REPO\src\emerger.ps1" --self-update @Arguments diff --git a/update.sh b/update.sh index c17b1a1..88a21e5 100755 --- a/update.sh +++ b/update.sh @@ -1,20 +1,5 @@ -#!/bin/bash - -# Keeping track of exact time -date "+%D %T:%N" >> $1.log - -source $1src/utils/global.sh - -# git pull from main -puts RED "Update repository: starting" -if [[ $1 != "" ]]; then - git -C $1 pull https://github.com/MasterCruelty/eMerger.git/ -else - git pull https://github.com/MasterCruelty/eMerger.git/ -fi - -# Instead of re-installing, use our tests to check if everything is okay -source $1src/test/integrity_check.sh $1 2>>$1.log -puts GREEN "Update repository: completed" - -exit 0 +#!/usr/bin/env bash +# Thin wrapper; delegates to `up --self-update`. +set -Eeuo pipefail +REPO_DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) +exec bash "$REPO_DIR/src/emerger.sh" --self-update "$@" From 52552047e1eddad151b666c2ad89a77bf2d9bb91 Mon Sep 17 00:00:00 2001 From: Edoardo Ferrari <43927507+archetipico@users.noreply.github.com> Date: Tue, 14 Apr 2026 12:40:07 +0200 Subject: [PATCH 2/3] fix --- src/lib/diff.sh | 1 - src/lib/mirrors.sh | 1 - src/lib/run.sh | 1 - 3 files changed, 3 deletions(-) diff --git a/src/lib/diff.sh b/src/lib/diff.sh index 010ca32..fa89ce4 100644 --- a/src/lib/diff.sh +++ b/src/lib/diff.sh @@ -33,7 +33,6 @@ diff_compute() { local before="$1" after="$2" out="$3" : >"$out" [[ -f $before && -f $after ]] || return 0 - trap 'rm -f "${out}.a" "${out}.b"' RETURN # Build maps by "mgr\tname" -> version awk -F'\t' '{print $1"\t"$2"\t"$3}' "$before" | sort -u >"${out}.b" awk -F'\t' '{print $1"\t"$2"\t"$3}' "$after" | sort -u >"${out}.a" diff --git a/src/lib/mirrors.sh b/src/lib/mirrors.sh index a2d1bd3..f2c418d 100644 --- a/src/lib/mirrors.sh +++ b/src/lib/mirrors.sh @@ -18,7 +18,6 @@ mirrors_refresh() { fi if sys_has netselect-apt; then local tmp; tmp=$(mktemp -t emerger.XXXXXX) - trap 'rm -f "$tmp"' RETURN if sudo netselect-apt -o "$tmp" >/dev/null 2>&1 && [[ -s $tmp ]]; then sudo install -m 0644 "$tmp" /etc/apt/sources.list.d/netselect.list ui_ok "netselect-apt: wrote /etc/apt/sources.list.d/netselect.list" diff --git a/src/lib/run.sh b/src/lib/run.sh index 776748e..d032a16 100644 --- a/src/lib/run.sh +++ b/src/lib/run.sh @@ -28,7 +28,6 @@ run_cmd() { fi local tmp; tmp=$(mktemp -t emerger.XXXXXX) - trap 'rm -f "$tmp"' RETURN local attempt=1 while :; do : >"$tmp" From 27d0e778ae916df675aa31bb5bdfd35bc5b99dd6 Mon Sep 17 00:00:00 2001 From: Edoardo Ferrari <43927507+archetipico@users.noreply.github.com> Date: Thu, 16 Apr 2026 15:51:53 +0200 Subject: [PATCH 3/3] update documentation --- README.md | 616 ++++++++++++-- doc/documentation.pdf | Bin 217082 -> 372381 bytes doc/documentation.tex | 1844 ++++++++++++++++++++++++++++++++++------- 3 files changed, 2076 insertions(+), 384 deletions(-) diff --git a/README.md b/README.md index 69af492..bb5c0c0 100644 --- a/README.md +++ b/README.md @@ -13,20 +13,25 @@ Works on **Linux**, **macOS** and **Windows**. Auto-detects every package manager you have, runs them in the right order, gives you one clean summary at the end. No YAML, no daemons. +> New to package managers? Read the [Why eMerger?](#why-emerger) section +> first. In a hurry? Jump to [Quickstart](#quickstart). + --- ## Table of contents -1. [Platforms at a glance](#platforms-at-a-glance) -2. [Quickstart](#quickstart) -3. [Requirements](#requirements) -4. [Installation](#installation) +1. [Why eMerger?](#why-emerger) +2. [Platforms at a glance](#platforms-at-a-glance) +3. [Quickstart](#quickstart) +4. [What `up` actually does](#what-up-actually-does) +5. [Requirements](#requirements) +6. [Installation](#installation) - [Linux](#install-linux) - [macOS](#install-macos) - [Windows](#install-windows) -5. [Uninstallation](#uninstallation) -6. [Update / self-update](#update--self-update) -7. [User manual](#user-manual) +7. [Uninstallation](#uninstallation) +8. [Update / self-update](#update--self-update) +9. [User manual](#user-manual) - [Running](#running) - [Flags, quick reference](#flags-quick-reference) - [Combining flags](#combining-flags) @@ -45,28 +50,74 @@ at the end. No YAML, no daemons. - [Reports](#reports) - [History & errors](#history--errors) - [Doctor](#doctor) -8. [Configuration](#configuration) - - [config file](#config-file) - - [Profiles](#profiles) - - [Hooks](#hooks) - - [Ignore list (Linux)](#ignore-list-linux) - - [Quiet hours](#quiet-hours) - - [Manager plugins](#manager-plugins) -9. [Integration](#integration) - - [JSON output](#json-output) - - [Prometheus metrics](#prometheus-metrics) - - [Reboot exit code](#reboot-exit-code) - - [Download-only / offline](#download-only--offline) - - [Manager filtering](#manager-filtering) - - [Rollback](#rollback) - - [Short flag bundling](#short-flag-bundling) -10. [Auto-update (unattended)](#auto-update-unattended) -11. [Files & paths](#files--paths) -12. [Supported package managers](#supported-package-managers) -13. [Exit codes](#exit-codes) -14. [Troubleshooting](#troubleshooting) -15. [Development](#development) -16. [License](#license) +10. [Configuration](#configuration) + - [config file](#config-file) + - [All config variables](#all-config-variables) + - [Profiles](#profiles) + - [Hooks](#hooks) + - [Ignore list (Linux)](#ignore-list-linux) + - [Quiet hours](#quiet-hours) + - [Manager plugins](#manager-plugins) +11. [Integration](#integration) + - [JSON output](#json-output) + - [Prometheus metrics](#prometheus-metrics) + - [Reboot exit code](#reboot-exit-code) + - [Download-only / offline](#download-only--offline) + - [Manager filtering](#manager-filtering) + - [Rollback](#rollback) + - [Short flag bundling](#short-flag-bundling) +12. [Auto-update (unattended)](#auto-update-unattended) +13. [Cookbook / Recipes](#cookbook--recipes) +14. [Safety & security](#safety--security) +15. [Files & paths](#files--paths) +16. [Supported package managers](#supported-package-managers) +17. [Exit codes](#exit-codes) +18. [Troubleshooting](#troubleshooting) +19. [FAQ](#faq) +20. [Glossary](#glossary) +21. [Development](#development) +22. [License](#license) + +📄 **For a printable, all-in-one reference see +[doc/documentation.pdf](./doc/documentation.pdf).** + +--- + +## Why eMerger? + +A modern machine gets its software from many different places at once: +the distro's own package manager (`apt`, `dnf`, `pacman`, `zypper`, +`softwareupdate`, `winget`...), an app-store layer (`flatpak`, `snap`, +`brew --cask`, `choco`, `scoop`), a user-level store (`brew`, `mas`), +language ecosystems (`npm`, `pip`, `cargo`, `gem`, `pnpm`...) and, on +Linux, firmware via `fwupdmgr`. Each has its own syntax, its own cache, +its own notion of "security update" and its own definition of "clean". + +Keeping all of them up to date by hand is tedious and error-prone. +Writing a personal wrapper that works on three operating systems is a +weekend project most people never finish. + +**eMerger is that wrapper, generalised.** Type `up` and it will: + +1. detect every package manager installed on the host +2. ask for `sudo` (or trigger UAC) only if something actually needs it +3. take an optional snapshot so you can audit the run afterwards +4. run refresh / upgrade / clean, in the right order, with retries +5. wipe user caches and the trash, optionally +6. print one summary with per-manager result, disk freed, run duration + and a reboot advisory +7. export the same summary as JSON, Markdown or a Prometheus file + +It does this with no daemon, no YAML, no Python/Ruby runtime. Just Bash +on Unix, PowerShell on Windows. + +**What eMerger is NOT:** + +- Not a package manager itself. It drives the ones you already have. +- Not a configuration management system. No desired state, no manifest. + If you want that, use Ansible, Salt or NixOS. +- Not a service. It can install a weekly timer, but it does not run in + the background. --- @@ -80,16 +131,21 @@ at the end. No YAML, no daemons. | Uninstall | `./uninstall.sh` | `./uninstall.sh` | `.\uninstall.ps1` | | Auto-update | systemd user timer / cron | launchd-compat cron | Task Scheduler | | Elevation | `sudo` | `sudo` | UAC relaunch | +| TUI menu | yes (`-i`) | yes (`-i`) | no | +| Parallel mode | yes | yes | no (always serial) | +| Snapshots | snapper/timeshift/btrfs | no | no (System Restore is manual) | | Config dir | `~/.config/emerger/` | `~/.config/emerger/` | `%APPDATA%\emerger\` | | State dir | `~/.local/state/emerger/` | `~/.local/state/emerger/` | `%LOCALAPPDATA%\emerger\state\` | Feature parity is kept for the core flow (detect → upgrade → clean → summary). -Platform-specific features are documented below. +Platform-specific features are documented below and clearly labelled. --- ## Quickstart +No commitment. Nothing gets upgraded until you say so. + **Linux / macOS** ```sh git clone https://github.com/MasterCruelty/eMerger @@ -97,8 +153,8 @@ cd eMerger ./setup.sh # open a new shell (or: source ~/.bashrc) up --help -up -n -up +up -n # preview: shows what would run +up # real run ``` **Windows** (PowerShell) @@ -108,10 +164,62 @@ cd eMerger .\setup.ps1 # open a new PowerShell window (or: . $PROFILE) up --help -up -n -up +up -n # preview +up # real run +``` + +### What you'll see on the first real run + +On a Debian/Ubuntu desktop with Flatpak installed, expect something like: + +```text + _____ __ __ +| ___| | \/ | eMerger v2.0.0 +| |__ | |\/| | one command for the whole system +|____| |_| |_| +Ubuntu 24.04 o x86_64 o 2026-04-16 10:12 +eMerger v2.0.0 o github.com/MasterCruelty/eMerger +[1/3] apt OK (38 upgraded, 0 removed, 0 new) +[2/3] flatpak OK (5 refreshed) +[3/3] fwupd SKIP (--firmware not set) ++---------------------------------------------+ +| eMerger - summary | +| duration 42s | +| freed 15 MiB | +| reboot not required | +| errors 0 | ++---------------------------------------------+ ``` +> **Do not run `sudo up`.** eMerger will ask for `sudo` itself, only for +> the managers that need it. Running `sudo up` would install user-level +> packages (e.g. `pip --user`, Homebrew, `npm -g`) into root's home. + +--- + +## What `up` actually does + +Each full run performs, in order: + +1. Load `config.sh` (or `config.ps1`) and any `--profile`. +2. Parse CLI flags. CLI always wins over config and profile defaults. +3. Acquire a global exclusive lock (`/tmp/emerger.lock` on Unix). +4. Print logo, OS info line and timestamp (skippable with `-nl`/`-ni`). +5. Warn on low battery and on low free disk space. +6. Cache `sudo` credentials (Unix) or relaunch elevated (Windows) if any + detected manager needs it. +7. Snapshot installed packages (for the post-run diff). +8. Run `pre.d` hooks. +9. For each detected manager: **refresh → upgrade → clean**. +10. Optionally clean user cache / `%TEMP%` and trash / Recycle Bin. +11. Run `post.d` hooks. +12. Compute the installed-packages diff. +13. Print boxed summary + reboot advisory. +14. Emit desktop notification if the session has a display (or if + BurntToast is installed on Windows). +15. Exit 0 on success, 3 if any manager failed, 4 if a reboot is pending + and `--reboot-exit` was passed. + --- ## Requirements @@ -231,7 +339,11 @@ function up { & "C:\path\to\eMerger\src\emerger.ps1" @args } Removes the shell alias / `up` function, any cronjob, systemd user timer or scheduled task. **Keeps** your config and state directories so you don't lose history or hooks. Delete those paths manually if you want a clean -wipe. +wipe: + +```sh +rm -rf ~/.config/emerger ~/.cache/emerger ~/.local/state/emerger +``` The repo itself is not removed - `rm -rf` or `Remove-Item` the directory when you're done. @@ -274,22 +386,7 @@ up # Linux / macOS up # Windows ``` -What happens: - -1. Show logo + OS info + timestamp (skippable with `-nl`/`-ni`). -2. Warn on low battery. -3. Warn on low disk space (`/` on Unix, `C:` on Windows). -4. Cache sudo credentials (Unix) or relaunch elevated (Windows) if any - detected manager needs it. -5. Snapshot installed packages (for diff). -6. Run `pre.d` hooks. -7. For each detected manager, run refresh → upgrade → clean. -8. Optionally clean user cache / `%TEMP%` and trash / recycle bin. -9. Run `post.d` hooks. -10. Compute diff. -11. Print boxed summary + reboot advisory. -12. Emit desktop notification (if session has a display / BurntToast is - installed on Windows). +Full list of flags: `up --help`. ### Flags, quick reference @@ -331,8 +428,9 @@ Authoritative list: `up --help`. Highlights: ### Combining flags Flags are independent tokens - mix and match as many as you need, in any -order. Short bundling (`-nv` for `-n -v`) is **not** supported; keep them -space-separated. +order. Short bundling `-nv` → `-n -v` is supported for the letters +`{h V n v q y i w}`. Compound short flags (`-nl`, `-ni`, `-qq`, `-up`, +`-err`, ...) and long flags pass through unchanged. ```sh up -n -v # dry-run + live stream (preview a full run) @@ -353,9 +451,10 @@ up -n --security # Windows, preview a security-only run ``` Flags that take a value (`--profile NAME`, `--changelog PKG`, -`--report FILE`) must keep their argument adjacent; everything else is -position-free. CLI flags always win over config file and profile defaults, -so you can override a profile on the fly: +`--report FILE`, `--metrics FILE`, `--only LIST`, `--except LIST`) must +keep their argument adjacent; everything else is position-free. CLI flags +always win over config file and profile defaults, so you can override a +profile on the fly: ```sh up --profile work --dev # work profile, but force dev toolchains this run @@ -378,12 +477,24 @@ up -v # stream pkg-manager output live up -n -v # both ``` +Example of `-n` output: + +```text +$ up -n +[dry] sudo apt update +[dry] sudo apt upgrade -y +[dry] sudo apt autoremove -y +[dry] sudo apt clean +[dry] flatpak update -y +[dry] flatpak uninstall --unused -y +``` + ### Quiet levels -- default - full UI +- **default** - full UI with box and spinner - `-q` - hide muted/info lines -- `-qq` - only step titles + one-line summary -- `-qqq` - exit code only +- `-qq` - only step titles + one-line summary (great for systemd logs) +- `-qqq` - no output at all; exit code is the only signal ### Security-only updates @@ -406,8 +517,18 @@ Opt-in (every platform): up --dev ``` -Updates `rustup`, `cargo install-update -a`, `npm update -g`, `pnpm -g update`, -`pip` (user), `gem update`. +Updates: + +| Tool | Command | +|---|---| +| `rustup` | `rustup self update && rustup update stable` | +| `cargo` | `cargo install-update -a` | +| `npm` | `npm update -g` | +| `pnpm` | `pnpm -g update` | +| `pip` | user-site upgrades | +| `gem` | `gem update` | + +These never run under `sudo`. Missing toolchains are silently skipped. ### Firmware (Linux) @@ -481,6 +602,16 @@ Every run records installed packages before/after. View it: up --changed ``` +Example output: + +```text +$ up --changed +~ firefox 123.0.1 -> 124.0 +~ libc6 2.39-0 -> 2.39-1 ++ flatpak-xdg-utils 1.0.6 +- old-package 2.1 +``` + Legend: `+` added, `-` removed, `~` upgraded. Linux/macOS. Read a single package's upstream changelog: @@ -524,7 +655,8 @@ Audits: - pending reboot flag - (Windows) ExecutionPolicy -Exits non-zero if issues are found. +Exits non-zero if issues are found. **Always attach `up --doctor` output +when reporting a bug.** --- @@ -535,11 +667,17 @@ Exits non-zero if issues are found. **Linux / macOS** - `~/.config/emerger/config.sh` (sourced before arg parsing): ```sh +# Defaults ARG_DEV=1 # always include dev toolchains ARG_WEATHER=1 # always show weather +ARG_PARALLEL=1 # user-space managers in parallel + +# Thresholds DISK_MIN_FREE_MB=2048 # require >= 2 GB on / -QUIET_HOURS="23:00-07:00" # skip scheduled runs inside this window RETRY_MAX=3 # transient-error retries + +# Scheduling +QUIET_HOURS="23:00-07:00" # skip scheduled runs inside this window ``` **Windows** - `%APPDATA%\emerger\config.ps1` (dot-sourced before arg parsing): @@ -550,6 +688,33 @@ $script:ArgsGlobal.Security = $true $script:ArgsGlobal.NoTrash = $true ``` +### All config variables + +| Variable | Default | Meaning | +|---|---|---| +| `ARG_DEV` | 0 | include dev toolchains by default | +| `ARG_FIRMWARE` | 0 | include `fwupdmgr` by default | +| `ARG_NO_FIRMWARE` | 0 | force-skip firmware | +| `ARG_SECURITY` | 0 | security-only by default | +| `ARG_YES` | 0 | assume yes by default | +| `ARG_PARALLEL` | 0 | parallel user-space by default | +| `ARG_WEATHER` | 0 | show weather widget | +| `ARG_NO_EMOJI` | 0 | force ASCII glyphs | +| `ARG_NO_CACHE` | 0 | skip user cache cleaning | +| `ARG_NO_TRASH` | 0 | skip trash cleaning | +| `ARG_NO_LOGO` | 0 | hide logo | +| `ARG_NO_INFO` | 0 | hide system info line | +| `QUIET_LEVEL` | 0 | 0=full UI, 1=`-q`, 2=`-qq`, 3=`-qqq` | +| `DISK_MIN_FREE_MB` | 1024 | abort/warn below this many MiB | +| `BATTERY_MIN_PCT` | 20 | warn below this battery percent | +| `RETRY_MAX` | 2 | transient-error retries | +| `RETRY_DELAY` | 3 | seconds between retries | +| `QUIET_HOURS` | (unset) | `"HH:MM-HH:MM"` - skip scheduled runs inside window | +| `EMERGER_CACHE_TTL` | 86400 | detection cache TTL in seconds, 0 disables | + +> CLI flags always win. `ARG_SECURITY=1` in `config.sh` plus `up --dev` on +> the CLI will run security updates **and** dev toolchains. + ### Profiles Profiles are config snippets scoped to a name. @@ -563,8 +728,8 @@ Shipped defaults in `share/profiles/`: | Profile | Meant for | |---|---| -| `work` | laptop al lavoro - security, unattended, no cache/trash | -| `home` | PC fisso - tutto, dev toolchains, parallel | +| `work` | laptop at work - security, unattended, no cache/trash | +| `home` | desktop at home - everything, dev toolchains, parallel | | `server` | headless - `-qq`, security, no prompts | | `safe` | pre-presentation - security only, no big downloads | @@ -576,6 +741,20 @@ Each platform looks for its own extension: User profiles go in `~/.config/emerger/profiles.d/` (Unix) or `%APPDATA%\emerger\profiles.d\` (Windows) and shadow the shipped ones. +Example custom profile (`~/.config/emerger/profiles.d/train.sh`): + +```sh +# description: on a train, prefetch only, keep the fans quiet +ARG_DOWNLOAD_ONLY=1 +ARG_YES=1 +ARG_QUIET=1 +QUIET_LEVEL=2 +ARG_NO_TRASH=1 +ARG_NO_CACHE=1 +``` + +Then `up --profile train` does a silent prefetch. + ### Hooks Drop executable scripts in `hooks/pre.d/` (before updates) or @@ -585,20 +764,46 @@ warning but never aborts the run. - Unix: `*.sh`, run under bash. - Windows: `*.ps1`, dot-sourced under PowerShell. -Example: +**Example 1 - backup dotfiles before every run:** ```sh # ~/.config/emerger/hooks/pre.d/10-backup-dotfiles.sh #!/usr/bin/env bash -rsync -a ~/.config/ ~/backups/dotfiles/ +set -e +rsync -a --delete ~/.config/ ~/backups/dotfiles/ ``` +**Example 2 - Slack notification after every run:** + +```sh +# ~/.config/emerger/hooks/post.d/99-slack.sh +#!/usr/bin/env bash +state=~/.local/state/emerger +payload=$(tail -1 "$state/history.jsonl") +curl -sS -X POST -H 'Content-Type: application/json' \ + -d "{\"text\":\"eMerger: $payload\"}" "$SLACK_WEBHOOK_URL" +``` + +**Example 3 - copy last log to clipboard (Windows):** + ```powershell -# %APPDATA%\emerger\hooks\post.d\10-log-to-gist.ps1 -Get-Content (Join-Path $env:LOCALAPPDATA 'emerger\state\emerger.log') -Tail 20 | - Set-Clipboard +# %APPDATA%\emerger\hooks\post.d\10-log-to-clipboard.ps1 +$log = Join-Path $env:LOCALAPPDATA 'emerger\state\emerger.log' +Get-Content $log -Tail 40 | Set-Clipboard ``` +**Example 4 - export Prometheus metrics automatically:** + +```sh +# ~/.config/emerger/hooks/post.d/90-prom.sh +#!/usr/bin/env bash +up --metrics /var/lib/node_exporter/textfile_collector/emerger.prom +``` + +> Hooks run with the privileges that invoked `up`. If you need root-owned +> side effects, write them in `post.d` and guard with `sudo -n` or a +> targeted sudoers entry. + ### Ignore list (Linux) `~/.config/emerger/ignore.list` - one package per line, `#` comments ok. @@ -613,7 +818,8 @@ Honored natively by **pacman** (`--ignore=`). For others it is Set `QUIET_HOURS="HH:MM-HH:MM"` in `config.sh`. When a scheduled run starts inside that window **and** `-y` is set (i.e. from the timer), eMerger exits -immediately. Interactive runs always proceed. Linux/macOS. +immediately. Interactive runs always proceed. Windows across midnight is +supported (e.g. `"23:00-07:00"`). Linux/macOS. ### Manager plugins @@ -628,8 +834,9 @@ pm_mytool_needs_sudo() { return 1; } # optional, default: no sudo pm_mytool_parallel() { return 0; } # optional, default: serial pm_mytool_dev() { return 1; } # optional, default: not gated by --dev pm_mytool_icon() { printf '🔌'; } # optional + pm_mytool_run() { - run_cmd "mytool update" mytool update || return 1 + run_cmd "mytool refresh" mytool refresh || return 1 run_cmd "mytool upgrade" mytool upgrade -y || return 1 } ``` @@ -644,7 +851,8 @@ gives them `--dry-run`, retry, logging and live-log handling for free. The detection cache is keyed by manager slug and lives at `~/.cache/emerger/detected`. TTL defaults to 1 day; override via -`EMERGER_CACHE_TTL=` in `config.sh` (0 disables caching). +`EMERGER_CACHE_TTL=` in `config.sh` (0 disables caching). After +installing or removing a package manager, run `up -rc` to clear the cache. Linux/macOS only. Windows plugins are not yet supported. @@ -668,7 +876,17 @@ from a CI job: "managers":[{"name":"apt","result":"ok"},{"name":"flatpak","result":"ok"}]} ``` -The same schema is what `history.jsonl` stores one per line. +Every run also appends one such line to +`~/.local/state/emerger/history.jsonl` (one JSON per line). Fields: + +| Field | Meaning | +|---|---| +| `ts` | ISO 8601 UTC timestamp of the run start | +| `duration` | total wall-clock seconds | +| `freed_kb` | cache and trash bytes freed, in KiB | +| `errors` | number of managers that returned non-zero | +| `reboot` | 1 if a reboot is required, else 0 | +| `managers` | array of `{name, result}` entries | ### Prometheus metrics @@ -811,6 +1029,160 @@ Unregister-ScheduledTask eMerger To avoid night-time runs, pair with `QUIET_HOURS` in `config.sh`. +> On Linux, systemd **user** timers do not fire unless a login session is +> open for the user. Run `loginctl enable-linger $USER` once (as root) to +> make them fire in the background. + +--- + +## Cookbook / Recipes + +Concrete, copy-pasteable snippets for common situations. + +### Daily driver (desktop) + +```sh +up -v +``` + +Simple. Live output, everything updated, cache and trash wiped at the +end. Add `--firmware` once a month on Linux. + +### Unattended server + +One-off setup: + +```sh +cat > ~/.config/emerger/config.sh <<'EOF' +ARG_SECURITY=1 +ARG_YES=1 +ARG_NO_CACHE=1 +ARG_NO_TRASH=1 +QUIET_HOURS="08:00-18:00" +EOF +up -au +``` + +Pair with a Prometheus hook for dashboards: + +```sh +cat > ~/.config/emerger/hooks/post.d/90-prom.sh <<'EOF' +#!/usr/bin/env bash +up --metrics /var/lib/node_exporter/textfile_collector/emerger.prom +EOF +chmod +x ~/.config/emerger/hooks/post.d/90-prom.sh +``` + +### Developer workstation + +```sh +up --dev --firmware --parallel -v +# or, as a profile: +up --profile home +``` + +### Pre-demo machine + +The day before a presentation: security patches, no big downloads, no +reboot. + +```sh +up --profile safe +``` + +### Metered / mobile connection + +Prefetch when on good Wi-Fi: + +```sh +up --download-only -y +``` + +Install later, even without network (the cache is already warm): + +```sh +up -y +``` + +### CI runner / container image + +```sh +up --only apt -y -qq --reboot-exit +rc=$? +if [[ $rc -eq 4 ]]; then echo "reboot required"; exit 0; fi +exit $rc +``` + +### Maintenance window with rollback guard + +Snapshot, update, rollback on failure, reboot on success: + +```sh +set -e +up --snapshot -y || { up --rollback; exit 1; } +up -y --reboot-exit +rc=$? +if [[ $rc -eq 4 ]]; then systemctl reboot; fi +``` + +### macOS with Homebrew only + +```sh +up --only brew,mas -v +``` + +### Windows without Chocolatey + +```powershell +up --except choco -v +``` + +### Audit a single package + +```sh +up -n | grep -i firefox # what would happen to it +up --changelog firefox # what changed upstream +``` + +### Pin a package (Linux) + +Add to `~/.config/emerger/ignore.list`: + +```text +nvidia-driver-535 +``` + +Then tell `apt` explicitly: + +```sh +sudo apt-mark hold nvidia-driver-535 +``` + +(pacman respects the file natively.) + +--- + +## Safety & security + +- eMerger is a client-side tool. No network listener, no daemon, no + persistent background process. +- It reads and writes only three locations: `~/.config/emerger/`, + `~/.cache/emerger/`, `~/.local/state/emerger/`, plus the global lock at + `/tmp/emerger.lock` on Unix. +- `sudo` credentials are cached by `sudo` itself, not by eMerger. When + the run ends, the cached credentials expire on the usual `sudo` + schedule (5 minutes by default). +- On Windows, UAC elevation happens **only** when a detected manager + actually needs admin. The elevation is logged. +- Hooks and plugins run as the invoking user. They can do anything the + user can do - only install hooks from sources you trust. +- The only network calls eMerger itself makes are (a) the optional + weather widget via `wttr.in`, (b) `git pull` during `--self-update`, + (c) `fwupdmgr refresh` when `--firmware` is active. Everything else is + delegated to the package manager you asked for. +- **No telemetry.** `history.jsonl` stays on your machine unless a hook + you wrote ships it elsewhere. + --- ## Files & paths @@ -827,6 +1199,9 @@ To avoid night-time runs, pair with `QUIET_HOURS` in `config.sh`. | `~/.cache/emerger/detected` | Detection cache (TTL: `EMERGER_CACHE_TTL`, default 86400s) | | `~/.local/state/emerger/emerger.log` | Log (rotated at 2000 lines) | | `~/.local/state/emerger/history.jsonl` | One JSON per run | +| `~/.local/state/emerger/pkgs.before` | Pre-run package snapshot | +| `~/.local/state/emerger/pkgs.after` | Post-run package snapshot | +| `~/.local/state/emerger/pkgs.diff` | Last-run package diff | | `~/.local/state/emerger/resume` | Resume cursor | | `/tmp/emerger.lock` | Global lock (`flock`) | @@ -863,7 +1238,7 @@ To avoid night-time runs, pair with `QUIET_HOURS` in `config.sh`. Want another one? Add a case branch to [`src/lib/packages.sh`](src/lib/packages.sh) (Unix) or [`src/pslib/Packages.ps1`](src/pslib/Packages.ps1) (Windows) - they're -simple table-driven dispatchers. +simple table-driven dispatchers. Or drop a [plugin](#manager-plugins). --- @@ -912,6 +1287,17 @@ clobber them. `WAYLAND_DISPLAY` in the environment (typical for cron). Use systemd user timer instead; it inherits the session. +**A manager fails with exit code 3** - run `up --errors` to tail the log, +then `up --doctor` to inspect the environment. Most failures come from a +manager's own health state (for example `dpkg` interrupted); run the +native repair command (`sudo dpkg --configure -a`, `sudo pacman -Dk`) +before retrying. + +**Nothing happens on scheduled runs** - check +`systemctl --user status emerger.timer` or the Windows Task Scheduler +entry. On Linux, user timers don't fire without an open session unless +you run `loginctl enable-linger $USER`. + **(Windows) "up : The term 'up' is not recognized"** - your PowerShell profile didn't load. Run `. $PROFILE` or open a new window. If still missing, re-run `.\setup.ps1`. @@ -929,6 +1315,82 @@ the actual work. **Pacman keeps asking about ignored packages** - `ignore.list` is passed as `--ignore=`; pacman still prints the warning line. Upstream behavior. +**"command not found: gum" or "whiptail"** - the interactive menu (`-i`) +falls back to a plain read loop when neither is installed. Install +[gum](https://github.com/charmbracelet/gum) for a nicer UI or ignore the +warning. + +--- + +## FAQ + +**Is eMerger safe for production servers?** +Yes, but use it in security-only, unattended mode: `up --profile server`. +Pair with `--reboot-exit` so your orchestrator decides when to reboot. + +**Does `up` install packages I don't already have?** +No. `up` only invokes managers that are already installed and only asks +them to upgrade what is already installed. No new software is added +unless a package upgrade pulls in a new dependency. + +**Does `up` reboot my machine?** +Only with `--reboot`. Without it, the summary prints a reboot advisory +and the run exits normally. + +**Can I use `up` without `sudo`?** +Yes, in user-only mode: `up --only flatpak,brew,npm,pip,cargo` (adjust to +what you have). User-level managers never need elevation. + +**Can I use `up` inside a Docker image build?** +Yes. Use `up --only apt -y -qq` (or the relevant manager) and ignore the +reboot advisory. Avoid `--firmware`, `--snapshot` and interactive flags. + +**What happens if two `up` runs start at the same time?** +The second one aborts with exit code 1 ("Another eMerger run is in +progress"). The lock is a plain `flock` on `/tmp/emerger.lock`. + +**How do I completely remove eMerger?** +Run the uninstaller, then: +```sh +rm -rf ~/.config/emerger ~/.cache/emerger ~/.local/state/emerger +rm -rf /path/to/eMerger # the repo itself +``` + +**Where is my data?** +All local, all in the paths listed in [Files & paths](#files--paths). +Nothing leaves your machine unless a hook you wrote ships it. + +**Can I contribute a new package manager?** +Absolutely - see [Development](#development). Most contributions are a +20-line dispatch branch plus a test case. + +**Why is the terminal flashing during `--parallel -v`?** +Each user-space manager streams its own output concurrently. Drop `-v` +or narrow the parallel set with `--only` if you want a calm terminal. + +--- + +## Glossary + +- **Dry-run**: a simulation. The tool prints the commands it would run + without actually running them. +- **Hook**: a user script that runs before (`pre.d`) or after (`post.d`) + the update flow. +- **Manager (package manager)**: software like `apt`, `pacman`, `brew`, + `winget` that installs, upgrades and removes programs on your machine. +- **Parallel mode**: concurrent execution of user-space managers. +- **Plugin**: a user-provided manager definition. Registers a new + manager without modifying the repository. +- **Profile**: a named bundle of default flags, loaded via + `--profile NAME`. +- **Resume cursor**: a file that records which managers completed + successfully, consumed by `--resume`. +- **Snapshot**: a read-only filesystem checkpoint taken before the + upgrade. Linux only (snapper/timeshift/btrfs). +- **TUI**: Terminal User Interface. The interactive menu (`-i`) on Unix. +- **UAC**: User Account Control, the Windows elevation prompt. eMerger + relaunches itself elevated when needed. + --- ## Development @@ -944,9 +1406,11 @@ eMerger/ │ ├── pslib/ # PowerShell libs │ └── logo/ ├── share/profiles/ # shipped profiles (*.sh + *.ps1) +├── share/plugins/ # example plugins ├── completions/ # bash/zsh/fish completions ├── tests/ # bats tests ├── man/up.1 # man page +├── doc/ # printable documentation ├── setup.sh setup.ps1 ├── uninstall.sh uninstall.ps1 ├── update.sh update.ps1 @@ -986,6 +1450,8 @@ eMerger/ | `progress.sh` | Output summary + highlight | | `estimate.sh` | Step ETA from history | | `ignore.sh` | Ignore list loader | +| `plugins.sh` | User plugin loader | +| `metrics.sh` | Prometheus textfile export | ### PowerShell lib modules (`src/pslib/`) diff --git a/doc/documentation.pdf b/doc/documentation.pdf index 5ee542f167df57fa980ef765722cc115343def83..a28f7d8c22bb3335ee64ac48aa4c49eea0c686e0 100644 GIT binary patch delta 337528 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%0DBV^Dh+cmjx2CmYJh{C#)sm5)V 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

      8t~qBS>$Pnf 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

    1. |nZ#lC+EHvt<8BVS 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

      ID%==cgifCVM)=ADx`Z(se;+0K z?9`4G9lm|JW&}NMWhdGXyj8t){>-+qnZMg^XoS#%@`YLE3oybUqTFrGxe+|Ys4%s~ z)$Mcg_t9CzTM{U3dR96cGG*pIHz!S->+E>2GQr?RG&?roSu9#Bu(0*-LcNX?w1_aY zKjGV~Z;$0=b0NcqAe~TH3PCM{e?$M${pJa&bxBP_^ZUiHK<1*<56Y*B=1zF`tq~=n z8Et*LgMifikv1>p!ys!lp}+K<#KnVN#3&cDqC?G#uP30dsl#ecoB_5j@;zIaIR$ku z%Eatl{(fZPK(V&eG|-7-ka(pus6_O;xJkN+@~&8SGo2qQ&Tdox07})Xe^f<2YD{~7 zW_%Q)gamg)!A{yZwTTrcH#Dz!E(Uoq2TEQnbNv}!W#gIQme#)r^M(u7zx&Sh@ zi2%xTf+4#`k2fWy``AfTxU6l-KJ-MKZYC+d9;A&L(nXm@#3CD_xkBp}VwN>zv8S{S zUHJ5jLp)ri;TlNef3iK)>pnw$sKDWd!DMW&;Bwgj6oKzeyMwdGbTaNBA3?}FAwIjj z4ry^T?+c942UzC&FfZGO8NKVraUawhl&F4QA^92sffZV=N@MpOo-!K4c7K^f;1714 ze2yBhcSD-owo&OK;9Z#=tvMo*>Kl}~A22E6d$tyl7T~uYe@%8cxc@Wfn3|T*ve1xk zsVpK4<9DV9c8*nF$jK3yW4r#+mv{{pF!;!#w{miU1i^s}VB(hGTP$KD^mD%pfZ zsTnxUn3cvOjEFRnq1u8m4r}!ARO(0c8L*Wk2-O82tBhBU4%ITLp1D*K=?XpGJ`BX0 zGcgY>}$M82$B-#%>bIB$MngG zb|bYWlCUGf7X5mQFMFF}?hys^dYPjL=h}dy0f+(?a}c0bu~ETaiCfPHZcA^4sZC-O zMqJG(mMMh;`9X*hbUBF#F_btK=wVWo9@#&6d;;o&e+GClbW%tkw~hY&w?t@+40maM zd8PFBU)+$@DY8p?gE7dm_zP*K_9zAH59?fqnIWxoQr*-+FEK?Xd+L@z z0O(u;4iQTax3AtDKF|Y%$%@d)7;F`B)doR6S5BgM6~@Z$ z>d7LwCFOp&u0Y$l_k4Mr{+DvLe|dkNwX_qF+K1+?kS)XqnA|J184WY73Xv&NKP-7Q ze<^=)>ztt#wdGyz8uf@$wGY#XL=dO9e@D;;<0$@*ZiW@S(B{wn2X=_VWr&F(&m z9Gw4PJ*9R^Vnn~7Gm8#()b$Xzh@Kt!mI434W40L|z_ZjglU&H^irYJGf#ioi0A;E7 zCUZLnHoPU!Eaqyn(BVel4`PpuA*~$~f6;=6FVR3BiS!>XS#M+0c_#GDqFu1vw57FX zY4DdWPB43(*T-)TO;@0xWseL+q^wQtRwB8cLYIhqSOAhnTDaCa;`HX$InfA(1aMIz7!65|l0~s+#KGPc4<5Yo2&kiwIXWP<-Ph!hWf3mbp ztq9dPbUjZ{Vy-gLMu{%3TCtiUV8MK{W25;sla_JW8RjGkNA#(9j6s1&+e~T6VG{7h z1Qu0~YZ9oCFjdtv6Wh_=Y>7A4Yc~|Q?;xVidz>w3V1eFhCigXzqRBmBW*FJZB}jPe@{ur{ zy|m_O%$Ie!G|TiS7{9}RLq@Y?IJr#%fAwch9bBJ! z1@R!cV~(B4=3jM>55)a>0@;XB_FeSr0Z8?Rgy`MWWE*+T0*zPSX7?H;szny{BRqJV zK6JbL_DE4MQL8HeBqu6nck&K(sQ3G99>?VhMpWsL(u_Ke2wn&!s^46uSh6DQ0CB~i z$9DGs&0)`o4{MqmYiRS#fAFz`YFD^k<6pJV%J{G1{E!Eb_x1${7}qDX`#$K1v+)Ut zWqcPFE1{{Da7ItXm;rQeFTs%FCd{-Oala`3YNm?s#7Wlj#f1WV0%0D9%XWmcvc(@1 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 diff --git a/doc/documentation.tex b/doc/documentation.tex index aff0e95..f167e93 100644 --- a/doc/documentation.tex +++ b/doc/documentation.tex @@ -8,6 +8,7 @@ \usepackage{lmodern} \renewcommand{\familydefault}{\sfdefault} % Latin Modern Sans Serif as default \usepackage{microtype} +\usepackage{textcomp} %------------------------------------------------------- % Layout @@ -19,6 +20,12 @@ \usepackage{titlesec} \titleformat{\section}{\Large\bfseries\sffamily}{\thesection}{0.8em}{} \titleformat{\subsection}{\large\bfseries\sffamily}{\thesubsection}{0.7em}{} +\titleformat{\subsubsection}{\normalsize\bfseries\sffamily}{\thesubsubsection}{0.6em}{} + +%------------------------------------------------------- +% Graphics +%------------------------------------------------------- +\usepackage{graphicx} %------------------------------------------------------- % Tables, colors, code @@ -27,12 +34,27 @@ \usepackage{booktabs} \usepackage{longtable} \usepackage{xcolor} +\usepackage{tcolorbox} +\tcbuselibrary{skins,breakable} \definecolor{codebg}{HTML}{F4F4F4} \definecolor{codefr}{HTML}{DADADA} \definecolor{codekw}{HTML}{1F6FEB} \definecolor{codest}{HTML}{22863A} \definecolor{codecm}{HTML}{6A737D} \definecolor{linkcol}{HTML}{0B5FFF} +\definecolor{tipbg}{HTML}{EAF4FF} +\definecolor{tipfr}{HTML}{0B5FFF} +\definecolor{warnbg}{HTML}{FFF4E5} +\definecolor{warnfr}{HTML}{B07000} +\definecolor{notebg}{HTML}{F0FFF0} +\definecolor{notefr}{HTML}{228B22} + +\newtcolorbox{tip}{colback=tipbg,colframe=tipfr,boxrule=0.6pt, + arc=2pt,left=6pt,right=6pt,top=4pt,bottom=4pt,breakable} +\newtcolorbox{warn}{colback=warnbg,colframe=warnfr,boxrule=0.6pt, + arc=2pt,left=6pt,right=6pt,top=4pt,bottom=4pt,breakable} +\newtcolorbox{note}{colback=notebg,colframe=notefr,boxrule=0.6pt, + arc=2pt,left=6pt,right=6pt,top=4pt,bottom=4pt,breakable} \usepackage{listings} \lstset{ @@ -52,11 +74,21 @@ keepspaces=true } \lstdefinelanguage{bashplus}{ - morekeywords={up,sudo,git,bash,alias,source,apt,dnf,pacman,zypper,brew,flatpak,snap,systemctl,cron,export}, + morekeywords={up,sudo,git,bash,alias,source,apt,dnf,pacman,zypper,brew,flatpak,snap,systemctl,cron,export,case,esac,if,then,fi,elif,for,do,done,while,in,function,return,echo,read,printf,curl,rsync}, + morecomment=[l]{\#}, + morestring=[b]", + morestring=[b]' +} +\lstdefinelanguage{psplus}{ + morekeywords={function,param,if,else,elseif,switch,return,foreach,for,while,break,continue,Get-ScheduledTask,Register-ScheduledTask,Install-Module,Set-Clipboard,Write-Host,Set-ExecutionPolicy,Join-Path}, morecomment=[l]{\#}, morestring=[b]", morestring=[b]' } +\lstdefinelanguage{jsonplus}{ + morestring=[b]", + morecomment=[l]{//} +} %------------------------------------------------------- % Links @@ -73,14 +105,24 @@ \begin{document} \maketitle +\begin{center} +\includegraphics[width=0.55\linewidth]{../src/logo/big_name.png} +\end{center} + \begin{abstract} \noindent -eMerger is a cross-platform command line tool that refreshes, upgrades and -cleans a computer with a single command: \texttt{up}. It runs on Linux, -macOS and Windows, auto-detects every package manager present on the host -and invokes them in the right order, returning one unified summary at the -end. This document describes the architecture, features, configuration and -integration points of the current release. +\textbf{eMerger} is a cross-platform command line tool that refreshes, +upgrades and cleans a computer with a single command: \texttt{up}. It runs +on \textbf{Linux}, \textbf{macOS} and \textbf{Windows}, auto-detects every +package manager present on the host and invokes them in the right order, +returning one unified summary at the end. No daemon. No YAML. No embedded +DSL. Just a small, auditable script that drives the tools you already have. + +This document is written to be readable by anyone: newcomers will find an +explanation of what a package manager is, what \texttt{up} actually does on +your machine and how to try it safely; experienced users will find a +complete reference for every flag, profile, hook, plugin and integration +point, plus a cookbook of real-world recipes. \end{abstract} \tableofcontents @@ -89,21 +131,124 @@ \vspace{1em} %------------------------------------------------------- -\section{Overview} +\section{How to read this document} %------------------------------------------------------- -eMerger began as a small Bash experiment and has grown into a portable -updater with a shared feature set across the three major desktop and server -platforms. The design follows three principles: +The document is organised in layers: + +\begin{itemize} + \item \textbf{Getting started} (sections \ref{sec:why}\,--\,\ref{sec:firstrun}): + what eMerger does, why you might want it, and a guided first run + that takes less than five minutes. + \item \textbf{User manual} (sections \ref{sec:flow}\,--\,\ref{sec:features}): + the execution flow, every command line flag with an example, and a + feature-by-feature walkthrough. + \item \textbf{Configuration} (sections \ref{sec:config}\,--\,\ref{sec:plugins}): + config file, profiles, hooks and user plugins, all with + copy-pasteable snippets. + \item \textbf{Integration} (sections \ref{sec:integration}\,--\,\ref{sec:auto}): + JSON, Prometheus, exit codes, CI, cron and systemd timers. + \item \textbf{Cookbook} (section \ref{sec:cookbook}): ready-to-use + recipes for laptops, servers, developer workstations, presentation + machines, CI runners and metered connections. + \item \textbf{Reference} (sections \ref{sec:files}\,--\,\ref{sec:glossary}): + file locations, supported managers, exit codes, troubleshooting, + FAQ and a glossary of terms. + \item \textbf{Development} (section \ref{sec:dev}): repo layout, module + responsibilities, running tests, adding a package manager. +\end{itemize} + +Throughout the document you will see three kinds of call-outs: + +\begin{tip} +\textbf{Tip} - a useful shortcut or a better way of doing something. +\end{tip} +\begin{note} +\textbf{Note} - background information or a clarification that is worth +remembering but not strictly required to move on. +\end{note} +\begin{warn} +\textbf{Warning} - something that can surprise you or cost you data if +ignored. Read these carefully. +\end{warn} + +\clearpage + +%------------------------------------------------------- +\section{Why eMerger?}\label{sec:why} +%------------------------------------------------------- + +\subsection{The problem} +A modern desktop or laptop runs software that comes from many different +sources at once: + +\begin{itemize} + \item the operating system distributor (\texttt{apt}, \texttt{dnf}, + \texttt{pacman}, \texttt{zypper}, \texttt{softwareupdate}, + \texttt{winget}\,\dots); + \item a cross-distro app store (\texttt{flatpak}, \texttt{snap}, + \texttt{brew --cask}, \texttt{choco}, \texttt{scoop}); + \item a user-level store (\texttt{brew}, \texttt{mas}); + \item language-specific ecosystems (\texttt{npm}, \texttt{pip}, + \texttt{cargo}, \texttt{gem}, \texttt{pnpm}\,\dots); + \item vendor firmware (\texttt{fwupdmgr} on Linux, \texttt{softwareupdate} + on macOS, Dell/Lenovo utilities on Windows). +\end{itemize} + +Each uses a slightly different command, has its own cache, its own notion +of ``security update'' and its own definition of ``clean''. Keeping all of +them up to date by hand is either tedious or error-prone, and writing a +personal wrapper that does the right thing on three operating systems is +a weekend project most people never finish. + +\subsection{The solution} +eMerger is that wrapper, generalised. Typing \texttt{up} on any supported +platform will: +\begin{enumerate} + \item detect every package manager installed on the host; + \item ask for \texttt{sudo} (or trigger a UAC elevation on Windows) only + if one of the detected managers actually needs it; + \item take an optional filesystem snapshot or a package list snapshot + so you can audit the run afterwards; + \item run refresh / upgrade / clean, in the right order, serially or in + parallel where safe; + \item clean user caches and the trash, optionally; + \item print a boxed summary with per-manager result, disk freed, run + duration and a reboot advisory; + \item export the same summary as JSON, Markdown or Prometheus textfile + if you ask. +\end{enumerate} + +It does this with no daemon, no YAML, no Python runtime and no Ruby +runtime: just a Bash script on Unix and a PowerShell script on Windows. + +\subsection{Design principles} \begin{itemize} \item \textbf{One command.} The user types \texttt{up}; everything else is automatic detection, ordering and reporting. - \item \textbf{No runtime bloat.} No daemon, no YAML, no embedded DSL. - Configuration is a plain shell or PowerShell file that is sourced - at startup. + \item \textbf{No runtime bloat.} Configuration is a plain shell or + PowerShell file that is sourced at startup. \item \textbf{Use what is there.} eMerger never installs a package manager on your behalf; it detects the ones already installed and delegates work to them. + \item \textbf{Safe by default.} Dry-run, retries, filesystem snapshots, + resume after interruption and a pre-flight health check are all + first-class options. + \item \textbf{Cross-platform parity.} The core flow (detect, upgrade, + clean, summarise) is identical on Linux, macOS and Windows. + Platform-specific features are gated and labelled. +\end{itemize} + +\subsection{What eMerger is \emph{not}} +\begin{itemize} + \item It is \textbf{not} a package manager itself. It does not download + or install software directly: it asks the native tools to do it. + \item It is \textbf{not} a configuration management system. There is no + desired-state manifest, no idempotent resource graph. If you want + that, use Ansible, Salt or NixOS. + \item It is \textbf{not} a scheduler. It can install a weekly systemd + timer, cron job or Windows scheduled task, but it does not run as + a service. \end{itemize} The project name is a wink at Gentoo's \texttt{emerge}: the tool started @@ -112,7 +257,7 @@ \section{Overview} manager behind a uniform interface. %------------------------------------------------------- -\section{Platforms} +\section{Platforms at a glance}\label{sec:platforms} %------------------------------------------------------- \begin{center} @@ -126,19 +271,82 @@ \section{Platforms} Uninstall & \texttt{./uninstall.sh} & \texttt{./uninstall.sh} & \texttt{.\textbackslash uninstall.ps1}\\ Auto-update & systemd timer / cron & cron & Task Scheduler \\ Elevation & \texttt{sudo} & \texttt{sudo} & UAC relaunch \\ +TUI menu & yes (\texttt{-i}) & yes (\texttt{-i}) & no \\ +Parallel mode & yes & yes & no (always serial) \\ +Snapshots & snapper/timeshift/btrfs & no & no (System Restore manual)\\ Config dir & \verb|~/.config/emerger/| & \verb|~/.config/emerger/| & \verb|%APPDATA%\emerger\|\\ State dir & \verb|~/.local/state/emerger/| & \verb|~/.local/state/emerger/| & \verb|%LOCALAPPDATA%\emerger\state\|\\ \bottomrule \end{tabular} \end{center} -The core flow (detect, upgrade, clean, summarise) is kept at parity across -platforms. Features that depend on operating system primitives, such as -firmware updates or filesystem snapshots, are gated to the platforms that -support them and are marked as such throughout this document. +The core flow is identical across platforms. Features that depend on +operating system primitives (firmware updates, filesystem snapshots, TUI) +are gated to the platforms that support them and labelled as such +throughout this document. %------------------------------------------------------- -\section{Installation} +\section{Requirements}\label{sec:requirements} +%------------------------------------------------------- + +eMerger never installs dependencies for you. The list below is what +``works out of the box'' vs. what unlocks optional features. + +\subsection{Linux} +\textbf{Required:} \texttt{bash} 3.2+, \texttt{coreutils}, \texttt{git}, +\texttt{sudo}. + +\textbf{Optional:} +\begin{itemize} + \item \texttt{gum} or \texttt{whiptail} for a nicer interactive menu. + \item \texttt{notify-send} for desktop notifications. + \item \texttt{curl} for the weather widget (\texttt{-w}) and + \texttt{--self-update} checks. + \item \texttt{flock} for the global lock (pre-installed on every + mainstream distribution). + \item \texttt{reflector} (Arch) or \texttt{netselect-apt} (Debian / + Ubuntu) for \texttt{--refresh-mirrors}. + \item \texttt{snapper}, \texttt{timeshift} or \texttt{btrfs-progs} for + \texttt{--snapshot} and \texttt{--rollback}. + \item \texttt{fwupdmgr} for \texttt{--firmware}. +\end{itemize} + +\subsection{macOS} +\textbf{Required:} the system \texttt{bash} at \texttt{/bin/bash} (3.2+ +is enough; no Homebrew Bash needed), and Xcode Command Line Tools for +\texttt{git}. + +\textbf{Optional:} +\begin{itemize} + \item Homebrew (\texttt{brew}), which in turn enables \texttt{brew --cask}. + \item \texttt{mas} (\texttt{brew install mas}) for Mac App Store + upgrades. +\end{itemize} + +\subsection{Windows} +\textbf{Required:} PowerShell 5.1 (built-in on Windows 10 and later) or 7+, +Git for Windows (needed by \texttt{up --self-update}). + +\textbf{Optional:} +\begin{itemize} + \item \texttt{winget}, \texttt{scoop}, \texttt{choco}: any combination + is auto-detected. + \item \texttt{PSWindowsUpdate} + (\texttt{Install-Module PSWindowsUpdate -Scope CurrentUser}) for + Windows Update integration. + \item \texttt{BurntToast} + (\texttt{Install-Module BurntToast -Scope CurrentUser}) for + native toast notifications. +\end{itemize} + +\begin{note} +eMerger never installs these for you - it only uses what is already +installed. This is deliberate: \texttt{up} must never put software on +your machine that you didn't ask for. +\end{note} + +%------------------------------------------------------- +\section{Installation}\label{sec:install} %------------------------------------------------------- \subsection{Linux and macOS} @@ -147,396 +355,1162 @@ \subsection{Linux and macOS} git clone https://github.com/MasterCruelty/eMerger cd eMerger ./setup.sh -# open a new shell (or: source ~/.bashrc) +# open a new shell, or: source ~/.bashrc up --help \end{lstlisting} -\texttt{setup.sh} performs the following actions: +\texttt{setup.sh} performs the following actions, in order: \begin{enumerate} - \item Adds \texttt{alias up='bash /path/to/eMerger/src/emerger.sh'} - to the appropriate shell rc file (bash, zsh or fish). + \item Adds \verb|alias up='bash /path/to/eMerger/src/emerger.sh'| to + the appropriate shell rc file (\texttt{.bashrc}, \texttt{.zshrc}, + \texttt{config.fish}). If you use multiple shells it writes the + alias in all of them. \item Marks \texttt{src/emerger.sh} as executable. - \item Installs shell completions for bash, zsh and fish. + \item Installs shell completions for \texttt{bash}, \texttt{zsh} and + \texttt{fish}: + \begin{itemize} + \item \verb|~/.local/share/bash-completion/completions/up| + \item \verb|~/.zsh/completions/_up| + \item \verb|~/.config/fish/completions/up.fish| + \end{itemize} \item Scaffolds \verb|~/.config/emerger/| with the default \texttt{config.sh}, \texttt{ignore.list}, \texttt{hooks/} and \texttt{profiles.d/} layout. \end{enumerate} -On macOS the alias is written to \texttt{\string~/.zshrc} first, since zsh -is the default interactive shell from Catalina onwards. When Homebrew is -present, completions are installed into the Homebrew prefix so they are -loaded by the brew-managed shell environment. +On macOS the alias is written to \texttt{\string~/.zshrc} first, since +\texttt{zsh} is the default interactive shell from Catalina onwards. When +Homebrew is present, completions are installed under the Homebrew prefix +so that they are loaded by the \texttt{brew}-managed shell environment. \subsection{Windows} -\begin{lstlisting}[language=bashplus] +\begin{lstlisting}[language=psplus] git clone https://github.com/MasterCruelty/eMerger cd eMerger .\setup.ps1 -# open a new PowerShell window (or: . $PROFILE) +# open a new PowerShell window, or: . $PROFILE up --help \end{lstlisting} -\texttt{setup.ps1} does not require administrator privileges. It lifts -the execution policy for the current user to \texttt{RemoteSigned} when -needed, defines a \texttt{function up} inside -\texttt{\$PROFILE.CurrentUserAllHosts} so that the command is available -from every PowerShell host, and scaffolds \verb|%APPDATA%\emerger\|. When a -package manager invocation later needs elevation, eMerger relaunches -itself under UAC. +\texttt{setup.ps1} does \emph{not} require administrator privileges: + +\begin{enumerate} + \item Lifts \texttt{ExecutionPolicy} for \texttt{CurrentUser} to + \texttt{RemoteSigned} when it was \texttt{Restricted} or + \texttt{Undefined}. + \item Defines \verb|function up { & "...\emerger.ps1" @args }| inside + \verb|$PROFILE.CurrentUserAllHosts|, so \texttt{up} works from + every PowerShell host (cmd-hosted PS, ISE, Windows Terminal, + VS Code integrated terminal). + \item Scaffolds \verb|%APPDATA%\emerger\| with + \texttt{config.ps1}, \texttt{hooks\textbackslash pre.d\textbackslash}, + \texttt{hooks\textbackslash post.d\textbackslash}, + \texttt{profiles.d\textbackslash}. +\end{enumerate} + +When a package manager run later needs elevation, eMerger relaunches +itself under UAC. The relaunch is logged, so you always know when it +happened. \subsection{Manual install} -When a packaged setup is undesirable, pointing an alias at the entry point -is enough: +When a packaged setup is undesirable (read-only home, corporate lockdown, +portable installation), pointing an alias at the entry point is enough: \begin{lstlisting}[language=bashplus] +# bash, zsh, fish - Linux or macOS alias up='bash /absolute/path/to/eMerger/src/emerger.sh' \end{lstlisting} -\begin{lstlisting}[language=bashplus] +\begin{lstlisting}[language=psplus] +# PowerShell - Windows function up { & "C:\path\to\eMerger\src\emerger.ps1" @args } \end{lstlisting} \subsection{Uninstall} -Running \texttt{./uninstall.sh} (Unix) or \texttt{.\textbackslash uninstall.ps1} -(Windows) removes the shell alias, the cron job or systemd timer, and the -scheduled task. Configuration and state directories are preserved so that -logs, profiles and hooks survive a reinstall; remove them manually to -start from a clean slate. +\begin{lstlisting}[language=bashplus] +./uninstall.sh # Linux / macOS +.\uninstall.ps1 # Windows +\end{lstlisting} + +The uninstaller removes the shell alias, the cron job or systemd timer, +and the scheduled task. Configuration and state directories are +\textbf{kept} so that logs, profiles and hooks survive a reinstall; remove +them manually to start from a clean slate: + +\begin{lstlisting}[language=bashplus] +rm -rf ~/.config/emerger ~/.local/state/emerger ~/.cache/emerger +\end{lstlisting} + +The repository itself is not removed: \texttt{rm -rf} the directory when +you are done. %------------------------------------------------------- -\section{Self-update} +\section{Self-update}\label{sec:selfupdate} %------------------------------------------------------- Three equivalent forms are accepted: \begin{lstlisting}[language=bashplus] -up -up -up --self-update -./update.sh # .\update.ps1 on Windows +up -up # short flag +up --self-update # long flag +./update.sh # out-of-band script (.\update.ps1 on Windows) \end{lstlisting} -Internally a \texttt{git pull --ff-only} is performed inside the clone and -the new commit range is printed. Non fast-forward updates are refused to -guarantee that local changes cannot silently disappear. +Internally a \texttt{git pull --ff-only} is performed inside the clone +and the new commit range is printed. Non fast-forward updates are refused +so that local changes never silently disappear. If you want the +self-update to also run every time you update your system, add it to a +\texttt{post.d} hook (see section \ref{sec:hooks}). %------------------------------------------------------- -\section{Execution flow} +\section{Quickstart}\label{sec:quickstart} +%------------------------------------------------------- + +Five minutes. No commitment. Nothing gets upgraded until you say so. + +\subsection{Step 1 - dry-run} +\begin{lstlisting}[language=bashplus] +up -n +\end{lstlisting} +This is the safe preview. It shows which managers were detected and what +commands \emph{would} be invoked. No \texttt{sudo}, no downloads, no +changes on disk. + +\subsection{Step 2 - real run} +\begin{lstlisting}[language=bashplus] +up +\end{lstlisting} +Refresh, upgrade, clean, one manager at a time. You will be asked for +\texttt{sudo} once (Unix) or get a UAC prompt (Windows) only if a detected +manager needs it. + +\subsection{Step 3 - see what changed} +\begin{lstlisting}[language=bashplus] +up --changed +\end{lstlisting} +Prints the package diff for the last run with \texttt{+} for added, +\texttt{-} for removed and \texttt{\~} for upgraded. + +\subsection{Step 4 - export a report} +\begin{lstlisting}[language=bashplus] +up --report last-run.md +\end{lstlisting} +Produces a Markdown file with the JSON summary, per-manager results, +reboot advisory and the full package diff as a table. + +\subsection{Step 5 (optional) - weekly unattended update} +\begin{lstlisting}[language=bashplus] +up -au +\end{lstlisting} +Installs a systemd user timer on Linux, a cron job on macOS or a +scheduled task on Windows. The trigger fires every Sunday at 10:00 +(local time) with $\pm$1h randomised delay, and always uses +\texttt{-y -q -nl -ni}. + +%------------------------------------------------------- +\section{Your first real run}\label{sec:firstrun} +%------------------------------------------------------- + +The very first time you run \texttt{up}, you should expect something like +this on a Debian/Ubuntu desktop with Flatpak and a couple of dev +toolchains: + +\begin{lstlisting}[basicstyle=\ttfamily\footnotesize] +$ up + _____ __ __ + | ___| | \/ | eMerger v2.0.0 + | |__ | |\/| | one command for the whole system + |____| |_| |_| + Ubuntu 24.04 o x86_64 o 2026-04-16 10:12 + eMerger v2.0.0 o github.com/MasterCruelty/eMerger + [1/3] apt OK (38 upgraded, 0 removed, 0 new) + [2/3] flatpak OK (5 refreshed) + [3/3] fwupd SKIP (--firmware not set) + +---------------------------------------------+ + | eMerger - summary | + | duration 42s | + | freed 15 MiB | + | reboot not required | + | errors 0 | + +---------------------------------------------+ +\end{lstlisting} + +\begin{tip} +If the colours or the box look wrong, your terminal may not support +Unicode glyphs. Run \texttt{up --no-emoji} once, or add +\verb|ARG_NO_EMOJI=1| to your \texttt{config.sh}. +\end{tip} + +\begin{warn} +\textbf{Do not} run \texttt{up} with \texttt{sudo} at the top level. eMerger +will ask for \texttt{sudo} itself, only for the managers that need it, and +will run user-level managers (\texttt{brew}, \texttt{flatpak} user +remotes, \texttt{npm} user globals, \texttt{pip --user}\,\dots) \emph{as +you}, not as root. Calling \verb|sudo up| will install user-level packages +into root's home. +\end{warn} + +%------------------------------------------------------- +\section{Execution flow}\label{sec:flow} %------------------------------------------------------- A full run of \texttt{up} performs, in order: \begin{enumerate} - \item Load \texttt{config.sh} (or \texttt{config.ps1}) and any - \texttt{-\/-profile}. - \item Parse CLI flags; CLI always wins over config and profile defaults. - \item Acquire an exclusive lock (\verb|/tmp/emerger.lock| on Unix). - \item Print the logo, OS info line and timestamp. - \item Warn on low battery and on low free disk space. - \item Cache \texttt{sudo} credentials on Unix, or relaunch elevated on - Windows, only when a detected manager actually needs it. - \item Snapshot the list of installed packages for the post-run diff. - \item Execute \texttt{pre.d} hooks. + \item Load \texttt{config.sh} (or \texttt{config.ps1}) if present. + \item If \texttt{-{}-profile NAME} is on the command line, pre-load + \verb|share/profiles/NAME.sh| (or the user override from + \verb|~/.config/emerger/profiles.d/|). + \item Parse CLI flags. CLI always wins over config and profile defaults. + \item If \texttt{QUIET\_HOURS} is set and we are inside the window + \emph{and} \texttt{-y} is set, exit immediately (this shields + scheduled runs from night-time activity without blocking + interactive ones). + \item Acquire the global exclusive lock (\verb|/tmp/emerger.lock| via + \texttt{flock} on Unix). If another \texttt{up} is already + running, abort with exit code 1. + \item Print the logo, OS info line and the current timestamp. + \item Warn on low battery (<20\% on a laptop) and on low free disk + space (default: less than 1024\,MiB on \texttt{/} or \texttt{C:}). + \item Cache \texttt{sudo} credentials on Unix - or relaunch elevated on + Windows - only when a detected manager actually needs it. + \item Snapshot the installed-packages list into \texttt{pkgs.before} for + the post-run diff. + \item Execute \texttt{pre.d} hooks in alphabetical order. \item For each detected manager, run \textit{refresh}, \textit{upgrade}, - \textit{clean}. - \item Optionally clear user cache and trash. + \textit{clean}; serial for system managers, concurrent for safe + user-space ones when \texttt{--parallel} is active. + \item Optionally clear user cache and trash (skippable with + \texttt{-nc} and \texttt{-nt}). \item Execute \texttt{post.d} hooks. - \item Compute the installed-packages diff. - \item Render the summary, the reboot advisory and an optional desktop - notification. + \item Snapshot the installed-packages list into \texttt{pkgs.after} and + compute \texttt{pkgs.diff}. + \item Render the boxed summary, the reboot advisory and an optional + desktop notification. + \item Exit 0 on success, 3 if any manager failed, 4 if a reboot is + required and \texttt{--reboot-exit} was passed. \end{enumerate} %------------------------------------------------------- -\section{Command line reference} +\section{Command line reference}\label{sec:cli} %------------------------------------------------------- -The authoritative reference is \texttt{up -\/-help}. The most frequently -used flags are summarised below. +The authoritative reference is \texttt{up -\/-help}; the table below +summarises every flag and is annotated with the most common uses. + +\subsection{Full flag catalogue} \begin{center} -\begin{longtable}{@{}p{0.28\linewidth} p{0.52\linewidth} p{0.14\linewidth}@{}} +\begin{longtable}{@{}p{0.26\linewidth} p{0.50\linewidth} p{0.18\linewidth}@{}} \toprule \textbf{Flag} & \textbf{Meaning} & \textbf{Platforms} \\ \midrule \endhead -\texttt{-n}, \texttt{-\/-dry-run} & Preview without running & all \\ -\texttt{-v}, \texttt{-\/-verbose} & Stream manager output live & all \\ -\texttt{-q} / \texttt{-qq} / \texttt{-qqq} & Progressive quiet levels & all \\ -\texttt{-y}, \texttt{-\/-yes} & Assume yes on prompts & all \\ -\texttt{-i}, \texttt{-\/-interactive} & TUI menu (gum / whiptail) & Unix \\ -\texttt{-\/-security} & Security-only updates & supported managers \\ -\texttt{-\/-dev} & Include dev toolchains & all \\ -\texttt{-\/-firmware} & \texttt{fwupdmgr} refresh+upd & Linux \\ -\texttt{-\/-parallel} & Run user-space in parallel & Unix \\ -\texttt{-\/-profile NAME} & Load profile & all \\ -\texttt{-\/-snapshot} & snapper / timeshift / btrfs & Linux \\ -\texttt{-\/-refresh-mirrors} & Re-rank distribution mirrors & Linux \\ -\texttt{-\/-resume} & Skip completed managers & Unix \\ -\texttt{-\/-reboot} & Reboot if required & all \\ -\texttt{-\/-changed} & Show package diff & Unix \\ -\texttt{-\/-changelog PKG} & Upstream changelog for PKG & Unix \\ -\texttt{-\/-report FILE} & Export Markdown report & Unix \\ -\texttt{-\/-doctor} & Health check & all \\ -\texttt{-\/-history} & Recent runs & all \\ -\texttt{-\/-errors}, \texttt{-err} & Tail of logged errors & all \\ -\texttt{-\/-json} & Machine-readable summary & all \\ -\texttt{-\/-reboot-exit} & Exit 4 if reboot is required & all \\ -\texttt{-\/-rollback} & Revert last snapshot & Linux \\ -\texttt{-\/-download-only}, \texttt{-\/-offline} & Prefetch, don't install & Unix \\ -\texttt{-\/-only LIST} & Only these managers & all \\ -\texttt{-\/-except LIST} & Skip these managers & all \\ -\texttt{-\/-metrics FILE} & Prometheus textfile export & all \\ -\texttt{-up} & Self-update eMerger & all \\ -\texttt{-au} & Install weekly auto-update & all \\ +\texttt{-h}, \texttt{--help} & Print help text and exit & all \\ +\texttt{-V}, \texttt{--version} & Print \texttt{eMerger X.Y.Z} & all \\ +\texttt{-n}, \texttt{--dry-run} & Preview without running & all \\ +\texttt{-v}, \texttt{--verbose} & Stream manager output live & all \\ +\texttt{-q} / \texttt{-qq} / \texttt{-qqq} & Progressive quiet levels & all \\ +\texttt{-y}, \texttt{--yes} & Assume yes on prompts & all \\ +\texttt{-i}, \texttt{--interactive} & TUI menu (gum / whiptail) & Unix \\ +\texttt{-w}, \texttt{--weather} & Show weather line via wttr.in & all \\ +\texttt{--no-emoji} & Force ASCII glyphs only & all \\ +\texttt{-nl}, \texttt{--no-logo} & Hide logo & all \\ +\texttt{-ni}, \texttt{--no-info} & Hide system info line & all \\ +\texttt{-nc}, \texttt{--no-cache} & Skip user cache cleaning & all \\ +\texttt{-nt}, \texttt{--no-trash} & Skip trash cleaning & all \\ +\texttt{--security} & Security-only updates & supported managers \\ +\texttt{--firmware} & Include \texttt{fwupdmgr} & Linux \\ +\texttt{--no-firmware} & Force-skip firmware & Linux \\ +\texttt{--dev} & Include dev toolchains & all \\ +\texttt{--parallel} & Run user-space in parallel & Unix \\ +\texttt{--profile NAME} & Load a profile & all \\ +\texttt{--list-profiles} & List available profiles & all \\ +\texttt{--only LIST} & Only these managers & all \\ +\texttt{--except LIST} & Skip these managers & all \\ +\texttt{--snapshot} & snapper / timeshift / btrfs & Linux \\ +\texttt{--rollback} & Revert last eMerger snapshot & Linux \\ +\texttt{--refresh-mirrors} & Re-rank distro mirrors & Linux \\ +\texttt{--resume} & Skip completed managers & Unix \\ +\texttt{--reboot} & Reboot if required & all \\ +\texttt{--reboot-exit} & Exit 4 if reboot required & all \\ +\texttt{--download-only}, \texttt{--offline} & Prefetch, don't install & Unix \\ +\texttt{--changed} & Show package diff & Unix \\ +\texttt{--changelog PKG} & Upstream changelog for PKG & Unix \\ +\texttt{--report [FILE]} & Export Markdown report & Unix \\ +\texttt{--history} & Recent runs & all \\ +\texttt{-err}, \texttt{--errors} & Tail of logged errors & all \\ +\texttt{--doctor} & Health check & all \\ +\texttt{--json} & Machine-readable summary & all \\ +\texttt{--metrics FILE} & Prometheus textfile export & all \\ +\texttt{-up}, \texttt{--self-update} & Self-update eMerger & all \\ +\texttt{-au}, \texttt{--auto-update} & Install weekly auto-update & all \\ +\texttt{-rc}, \texttt{--rebuild-cache} & Clear detection cache & all \\ \bottomrule \end{longtable} \end{center} \subsection{Combining flags} -Flags are independent tokens and can be combined freely: +Flags are independent tokens and can be combined freely, in any order. +Single-letter short flags in the set \texttt{\{h V n v q y i w\}} bundle +(\texttt{up -nv} equals \texttt{up -n -v}; \texttt{up -ynv} equals +\texttt{up -y -n -v}). Compound short flags (\texttt{-nl}, \texttt{-ni}, +\texttt{-qq}, \texttt{-up}, \texttt{-err}\,\dots) and long flags are never +bundled. \begin{lstlisting}[language=bashplus] -up -n -v # preview a full run, live stream -up -y -q --security # unattended security-only, minimal output -up --dev --parallel -v # include dev toolchains, parallel user-space -up --snapshot --reboot -y # snapshot first, reboot at the end if needed -up --profile server --resume +up -n -v # dry-run with live stream +up -y -q --security # unattended security-only, minimal output +up --dev --parallel -v # dev toolchains + user-space concurrency +up --snapshot --reboot -y # snapshot first, reboot at the end if needed +up --profile server --resume # resume an interrupted headless run +up -n --dev --firmware # preview a full run, no side effects +up -qq -y -nl -ni --security # exactly what the scheduled timer runs +up --refresh-mirrors -y -v # re-rank mirrors then upgrade, live +up --changed --report out.md # show diff and export in one shot \end{lstlisting} -Single-letter short flags in the set \texttt{\{h V n v q y i w\}} also -bundle: \texttt{up -nv} equals \texttt{up -n -v}. Compound short flags -(\texttt{-nl}, \texttt{-ni}, \texttt{-qq}, \texttt{-up}, \texttt{-err}, -\dots) and long flags are never bundled. +Flags that take a value (\texttt{--profile NAME}, \texttt{--changelog PKG}, +\texttt{--report FILE}, \texttt{--metrics FILE}, \texttt{--only LIST}, +\texttt{--except LIST}) must keep their argument adjacent; every other +flag is position-free. CLI flags always win over config file and profile +defaults, so you can override a profile on the fly: + +\begin{lstlisting}[language=bashplus] +up --profile work --dev # work profile, but force --dev this time +\end{lstlisting} %------------------------------------------------------- -\section{Features in depth} +\section{Features in depth}\label{sec:features} %------------------------------------------------------- \subsection{Dry-run and verbose} -\texttt{-n} prints every command that would be executed without actually -running it or asking for elevation, which makes it safe to run in a -terminal that does not own sudo credentials. \texttt{-v} streams the -output of each package manager live instead of buffering it into the -summary. The two combine naturally. +\texttt{-n} prints every command that \emph{would} be executed without +actually running it or asking for elevation, which makes it safe to run +in a terminal that does not own \texttt{sudo} credentials. Example +output: + +\begin{lstlisting}[basicstyle=\ttfamily\footnotesize] +$ up -n + [dry] sudo apt update + [dry] sudo apt upgrade -y + [dry] sudo apt autoremove -y + [dry] sudo apt clean + [dry] flatpak update -y + [dry] flatpak uninstall --unused -y +\end{lstlisting} + +\texttt{-v} streams the output of each package manager live instead of +buffering it into the summary. The two combine naturally: +\texttt{up -n -v}. \subsection{Quiet levels} -\texttt{-q} hides informational output, \texttt{-qq} keeps only the step -titles and the final one-line summary, \texttt{-qqq} produces no output -at all and communicates only through the exit code. +\begin{itemize} + \item \textbf{default} - full UI with logo, info line, step headers, + spinner, summary box. + \item \texttt{-q} - hides muted and informational lines but keeps the + per-manager result and the summary. + \item \texttt{-qq} - only step titles and the one-line summary; suitable + for cron/systemd logs. + \item \texttt{-qqq} - no output at all; the exit code is the only + signal. Suitable for embedding in shell pipelines. +\end{itemize} \subsection{Security-only updates} -When \texttt{-\/-security} is passed, each supporting manager is asked to -limit the upgrade set to security advisories: \texttt{apt} via -\texttt{unattended-upgrade}, \texttt{dnf} with \texttt{-\/-security}, -\texttt{zypper patch -\/-category security}, macOS via -\texttt{softwareupdate -\/-recommended} and Windows via -\texttt{PSWindowsUpdate} severity filtering. Managers that do not -distinguish between security and non-security updates ignore the flag. +When \texttt{--security} is passed, each supporting manager is asked to +limit the upgrade set to security advisories: + +\begin{itemize} + \item \textbf{apt} via \texttt{unattended-upgrade --security} (falls + back to \texttt{apt upgrade} for packages that are not in the + unattended security tree). + \item \textbf{dnf} with \texttt{upgrade --security}. + \item \textbf{zypper} with \texttt{patch --category security}. + \item \textbf{softwareupdate} (macOS) with \texttt{--recommended}. + \item \textbf{PSWindowsUpdate} (Windows) with severity filtering. +\end{itemize} + +Managers that do not distinguish between security and non-security +updates simply ignore the flag and skip the run. \subsection{Dev toolchains} -\texttt{-\/-dev} enables a separate track that runs \texttt{rustup} -updates, \texttt{cargo install-update -a}, \texttt{npm update -g}, -\texttt{pnpm -g update}, \texttt{pip} user site upgrades and -\texttt{gem update}. These run under the invoking user, never under -sudo. +\texttt{--dev} enables a separate track that runs: + +\begin{center} +\begin{tabular}{@{}ll@{}} +\toprule +\textbf{Tool} & \textbf{Command} \\ +\midrule +\texttt{rustup} & \texttt{rustup self update \&\& rustup update stable} \\ +\texttt{cargo} & \texttt{cargo install-update -a} \\ +\texttt{npm} & \texttt{npm update -g} \\ +\texttt{pnpm} & \texttt{pnpm -g update} \\ +\texttt{pip} & \texttt{pip list --outdated}, then user-site upgrade \\ +\texttt{gem} & \texttt{gem update} \\ +\bottomrule +\end{tabular} +\end{center} + +These run under the invoking user, never under \texttt{sudo}. If a +toolchain isn't installed it is silently skipped. \subsection{Firmware (Linux)} -\texttt{-\/-firmware} runs -\texttt{fwupdmgr refresh \&\& fwupdmgr update -y -\/-no-reboot-check}. -On macOS firmware is handled by \texttt{softwareupdate}; on Windows it -is delegated to vendor tooling (Dell Command Update, Lenovo Vantage, -etc.) and is out of scope. +\texttt{--firmware} runs +\texttt{fwupdmgr refresh \&\& fwupdmgr update -y --no-reboot-check}. +If the LVFS (Linux Vendor Firmware Service) is not reachable the step is +skipped with a warning. On macOS firmware is handled by +\texttt{softwareupdate}; on Windows it is delegated to vendor tooling +(Dell Command Update, Lenovo Vantage\,\dots) and is out of scope. \subsection{Parallel mode} -\texttt{-\/-parallel} runs user-space managers that do not touch the root +\texttt{--parallel} runs user-space managers that do not touch the root filesystem concurrently: \texttt{flatpak}, \texttt{snap}, \texttt{brew}, -\texttt{mas} and dev toolchains. System managers stay serial to avoid -lock contention. The Windows side is currently always serial. +\texttt{mas}, and the dev toolchains. System managers (\texttt{apt}, +\texttt{dnf}, \texttt{pacman}, \texttt{zypper}\,\dots) stay serial to +avoid lock contention on \texttt{/var/lib/dpkg}, \texttt{/var/cache/pacman} +and similar. The Windows side is currently always serial. \subsection{Snapshots and rollback (Linux)} -\texttt{-\/-snapshot} tries, in order, \texttt{snapper}, -\texttt{timeshift} and raw \texttt{btrfs subvolume snapshot}. -\texttt{-\/-rollback} reverts to the most recent eMerger-created snapshot; -\texttt{timeshift} is always invoked interactively because a silent -rollback is too destructive to automate. +\texttt{--snapshot} tries, in order: + +\begin{enumerate} + \item \texttt{snapper} - creates a pre-update snapshot tagged + \texttt{eMerger pre-update} on the root subvolume. + \item \texttt{timeshift} - runs \texttt{timeshift --create --tags D}. + \item raw \texttt{btrfs subvolume snapshot} - only if neither of the + above is installed; the snapshot is placed under + \verb|/.snapshots/emerger/|. +\end{enumerate} + +\texttt{--rollback} reverts to the most recent eMerger-created snapshot: + +\begin{itemize} + \item \textbf{snapper}: native + \texttt{snapper -c root rollback }. A reboot is required + afterwards (snapper semantics, not ours). + \item \textbf{timeshift}: hands off to \texttt{timeshift --restore} + \emph{interactively} - silent rollback is too destructive to + automate. + \item \textbf{raw btrfs}: refuses to swap subvolumes automatically, + prints the path of the latest snapshot so you can do it + manually. +\end{itemize} + +\begin{tip} +Combine with a guard to get a safe update cycle: + +\begin{lstlisting}[language=bashplus] +up --snapshot -y || up --rollback +\end{lstlisting} +\end{tip} \subsection{Mirrors refresh (Linux)} -\texttt{-\/-refresh-mirrors} re-ranks the repository mirrors before the -upgrade: \texttt{reflector -\/-latest 20 -\/-sort rate} on Arch, -\texttt{netselect-apt} on Debian and Ubuntu, and a no-op on Fedora -where \texttt{fastestmirror} already handles ranking at the DNF level. +\texttt{--refresh-mirrors} re-ranks the repository mirrors before the +upgrade: + +\begin{itemize} + \item \textbf{Arch}: \texttt{reflector --latest 20 --sort rate}. + \item \textbf{Debian/Ubuntu}: \texttt{netselect-apt} (requires + \texttt{netselect-apt} installed). + \item \textbf{Fedora}: no-op; the \texttt{fastestmirror} DNF plugin + already ranks mirrors at download time. +\end{itemize} \subsection{Reboot handling} On Unix, eMerger inspects \texttt{/var/run/reboot-required} and -\texttt{needs-restarting -r}. On Windows it reads the -\texttt{CBS RebootPending}, \texttt{WindowsUpdate\textbackslash RebootRequired} -and \texttt{PendingFileRenameOperations} registry entries. The summary -prints a reboot advisory; \texttt{-\/-reboot} actually reboots and -\texttt{-\/-reboot-exit} exits with code 4 so that an orchestrator can -decide. +\texttt{needs-restarting -r} (if available). On Windows it reads the +\texttt{CBS RebootPending}, +\texttt{WindowsUpdate\textbackslash RebootRequired} and +\texttt{PendingFileRenameOperations} registry entries. + +\begin{itemize} + \item The summary always prints a reboot advisory. + \item \texttt{--reboot} actually reboots the machine (requires + elevation). + \item \texttt{--reboot-exit} exits with code \textbf{4} so that an + orchestrator can decide what to do next. +\end{itemize} \subsection{Resume} -When a run is interrupted, a cursor is written to -\verb|~/.local/state/emerger/resume|. A subsequent \texttt{up -\/-resume} -skips every manager that completed successfully, so repeated failures do -not force a full retry. Unix only. +When a run is interrupted (Ctrl-C, lost network, disk full, laptop +suspend), a cursor is written to \verb|~/.local/state/emerger/resume| +after every successful manager. A subsequent \texttt{up --resume} skips +every manager that completed successfully, so repeated failures do not +force a full retry. Unix only. + +\subsection{Download-only / offline} +\texttt{--download-only} (alias \texttt{--offline}) refreshes the package +indexes and \emph{downloads} the pending upgrade set but does not install +it. Supported natively on \texttt{pacman} (\texttt{-Syuw}), \texttt{apt} +(\texttt{--download-only}), \texttt{dnf} (\texttt{--downloadonly}) and +\texttt{zypper} (\texttt{update --download-only}). Typical use cases: + +\begin{itemize} + \item laptop on a slow or metered connection: prefetch while on good + Wi-Fi, install later at the office; + \item servers in a maintenance window: prestage the set, flip to + install-only when the change ticket opens; + \item pre-flight for \texttt{--snapshot}: verify the whole update set + is downloaded \emph{before} taking a snapshot. +\end{itemize} \subsection{Package diff and changelog} Each run records the installed package set before and after. \texttt{up --\/-changed} prints the diff with \texttt{+}, \texttt{-} and \texttt{\~} -markers for added, removed and upgraded packages. \texttt{up -\/-changelog -PKG} dispatches to \texttt{apt changelog}, \texttt{dnf changelog}, +--changed} prints the diff with \texttt{+}, \texttt{-} and \texttt{\~} +markers: + +\begin{lstlisting}[basicstyle=\ttfamily\footnotesize] +$ up --changed + ~ firefox 123.0.1 -> 124.0 + ~ libc6 2.39-0 -> 2.39-1 + + flatpak-xdg-utils 1.0.6 + - old-package 2.1 +\end{lstlisting} + +\texttt{up --changelog PKG} dispatches to \texttt{apt changelog}, +\texttt{dnf changelog} (or \texttt{dnf updateinfo} if available), \texttt{pacman -Qi} or \texttt{brew log} depending on the host. \subsection{Reports, history and errors} -\texttt{-\/-report FILE} exports a Markdown report of the last run. -\texttt{-\/-history} prints a table of the most recent runs. -\texttt{-\/-errors} tails \texttt{ERROR} lines from the log. +\begin{itemize} + \item \texttt{--report FILE} exports a Markdown report of the last + run. Without a filename it writes to + \verb|$PWD/emerger-report.md|. + \item \texttt{--history} prints the last 10 runs as a table. + \item \texttt{-err} / \texttt{--errors} tails \texttt{ERROR} lines from + \verb|~/.local/state/emerger/emerger.log|. +\end{itemize} \subsection{Doctor} -\texttt{-\/-doctor} audits the environment: shell or PowerShell version, -sudo or admin state, disk space, network reachability, state directory -writability, per-manager native health checks -(\texttt{dpkg -\/-audit}, \texttt{pacman -Dk}, \texttt{brew doctor}), -pending reboot flags and, on Windows, the current execution policy. A -non-zero exit code is returned when any issue is detected. +\texttt{--doctor} audits the environment and prints a traffic-light +report: + +\begin{itemize} + \item shell / PowerShell version; + \item \texttt{sudo} cache / admin status; + \item disk space on the state partition; + \item network reachability (IPv4 and IPv6); + \item state directory writability; + \item per-manager native health: \texttt{dpkg --audit}, + \texttt{pacman -Dk}, \texttt{brew doctor}, \texttt{pip check}; + \item pending reboot flag; + \item (Windows) the current ExecutionPolicy and elevation status. +\end{itemize} + +A non-zero exit code is returned when any issue is detected. Always run +\texttt{up --doctor} before opening a bug report. %------------------------------------------------------- -\section{Configuration} +\section{Configuration}\label{sec:config} %------------------------------------------------------- -\subsection{Config file} +\subsection{Config file (Unix)} -\textbf{Unix} (\verb|~/.config/emerger/config.sh|, sourced before argument -parsing): +\verb|~/.config/emerger/config.sh| is a plain shell file sourced before +argument parsing. Every flag has a corresponding \texttt{ARG\_*} variable: \begin{lstlisting}[language=bashplus] +# ~/.config/emerger/config.sh + +# Defaults ARG_DEV=1 # always include dev toolchains -ARG_WEATHER=1 # show weather widget -DISK_MIN_FREE_MB=2048 # require at least 2 GB free on / -QUIET_HOURS="23:00-07:00" # skip scheduled runs in this window +ARG_WEATHER=1 # show weather widget via wttr.in +ARG_PARALLEL=1 # run user-space managers in parallel +ARG_NO_TRASH=1 # never empty the trash automatically + +# Thresholds +DISK_MIN_FREE_MB=2048 # require at least 2 GiB free on / +BATTERY_MIN_PCT=25 # warn below 25% RETRY_MAX=3 # transient-error retry count +RETRY_DELAY=5 # seconds between retries + +# Scheduling +QUIET_HOURS="23:00-07:00" # scheduled runs exit immediately inside this window + +# Caching +EMERGER_CACHE_TTL=3600 # detection cache: 1h (0 = disabled, default 86400) \end{lstlisting} -\textbf{Windows} (\verb|%APPDATA%\emerger\config.ps1|, dot-sourced): +\subsection{Config file (Windows)} + +\verb|%APPDATA%\emerger\config.ps1| is dot-sourced before argument +parsing: + +\begin{lstlisting}[language=psplus] +# %APPDATA%\emerger\config.ps1 -\begin{lstlisting}[language=bashplus] $script:ArgsGlobal.Dev = $true $script:ArgsGlobal.Security = $true $script:ArgsGlobal.NoTrash = $true + +# Thresholds (same semantics as Unix) +$script:DISK_MIN_FREE_MB = 4096 +$script:RETRY_MAX = 3 \end{lstlisting} -\subsection{Profiles} +\subsection{Every supported variable} + +\begin{center} +\begin{longtable}{@{}p{0.34\linewidth} p{0.18\linewidth} p{0.40\linewidth}@{}} +\toprule +\textbf{Variable} & \textbf{Default} & \textbf{Meaning} \\ +\midrule \endhead +\texttt{ARG\_DEV} & 0 & include dev toolchains by default \\ +\texttt{ARG\_FIRMWARE} & 0 & include \texttt{fwupdmgr} by default \\ +\texttt{ARG\_NO\_FIRMWARE} & 0 & force-skip firmware \\ +\texttt{ARG\_SECURITY} & 0 & security-only by default \\ +\texttt{ARG\_YES} & 0 & assume yes by default \\ +\texttt{ARG\_PARALLEL} & 0 & parallel user-space by default \\ +\texttt{ARG\_WEATHER} & 0 & show weather widget \\ +\texttt{ARG\_NO\_EMOJI} & 0 & force ASCII glyphs \\ +\texttt{ARG\_NO\_CACHE} & 0 & skip user cache cleaning \\ +\texttt{ARG\_NO\_TRASH} & 0 & skip trash cleaning \\ +\texttt{ARG\_NO\_LOGO} & 0 & hide logo \\ +\texttt{ARG\_NO\_INFO} & 0 & hide system info line \\ +\texttt{QUIET\_LEVEL} & 0 & 0=full UI, 1=\texttt{-q}, 2=\texttt{-qq}, 3=\texttt{-qqq} \\ +\texttt{DISK\_MIN\_FREE\_MB} & 1024 & abort / warn below this many MiB \\ +\texttt{BATTERY\_MIN\_PCT} & 20 & warn below this battery percent \\ +\texttt{RETRY\_MAX} & 2 & transient-error retries \\ +\texttt{RETRY\_DELAY} & 3 & seconds between retries \\ +\texttt{QUIET\_HOURS} & (unset) & \texttt{"HH:MM-HH:MM"} - skip scheduled runs inside window \\ +\texttt{EMERGER\_CACHE\_TTL} & 86400 & detection-cache TTL in seconds; 0 disables \\ +\bottomrule +\end{longtable} +\end{center} + +\begin{note} +The CLI always wins. \verb|ARG_SECURITY=1| in \texttt{config.sh} plus +\texttt{up --dev} on the CLI will run security updates \emph{and} dev +toolchains; passing \texttt{--no-firmware} will override +\verb|ARG_FIRMWARE=1|. +\end{note} + +\subsection{Profiles}\label{sec:profiles} Profiles are named configuration snippets loaded through -\texttt{-\/-profile NAME}. The shipped set lives under -\texttt{share/profiles/} and includes \texttt{work}, \texttt{home}, -\texttt{server} and \texttt{safe}. User overrides live in -\verb|~/.config/emerger/profiles.d/| on Unix and -\verb|%APPDATA%\emerger\profiles.d\| on Windows, and always shadow the -shipped defaults. - -\subsection{Hooks} +\texttt{--profile NAME}. They are ordinary config-file fragments scoped +to a name. + +The shipped set lives under \texttt{share/profiles/} and includes: + +\begin{center} +\begin{tabular}{@{}p{0.16\linewidth} p{0.78\linewidth}@{}} +\toprule +\textbf{Profile} & \textbf{Meant for} \\ +\midrule +\texttt{work} & laptop at the office - security-only, unattended, no + cache or trash wiping \\ +\texttt{home} & desktop at home - everything, including dev + toolchains, firmware and parallel mode \\ +\texttt{server} & headless - quiet (\texttt{-qq}), security only, no + prompts, no UI \\ +\texttt{safe} & before a demo or presentation - security only, no heavy + downloads \\ +\bottomrule +\end{tabular} +\end{center} + +User profiles go in \verb|~/.config/emerger/profiles.d/| (Unix) or +\verb|%APPDATA%\emerger\profiles.d\| (Windows). They shadow the shipped +defaults: a user \texttt{work.sh} wins over \texttt{share/profiles/work.sh}. + +Full content of the shipped \texttt{work} profile: + +\begin{lstlisting}[language=bashplus] +# description: laptop at work - security only, no firmware, never reboot +ARG_SECURITY=1 +ARG_YES=1 +ARG_NO_FIRMWARE=1 +ARG_NO_CACHE=1 +ARG_NO_TRASH=1 +\end{lstlisting} + +Writing a custom profile is just a shell fragment: + +\begin{lstlisting}[language=bashplus] +# ~/.config/emerger/profiles.d/train.sh +# description: on a train, prefetch only, keep the fans quiet +ARG_DOWNLOAD_ONLY=1 +ARG_YES=1 +ARG_QUIET=1 +QUIET_LEVEL=2 +ARG_NO_TRASH=1 +ARG_NO_CACHE=1 +\end{lstlisting} + +Then: + +\begin{lstlisting}[language=bashplus] +up --profile train +\end{lstlisting} + +List what is available: + +\begin{lstlisting}[language=bashplus] +up --list-profiles +\end{lstlisting} + +%------------------------------------------------------- +\section{Hooks}\label{sec:hooks} +%------------------------------------------------------- + Executable scripts in \texttt{hooks/pre.d/} and \texttt{hooks/post.d/} run before and after the update flow, in alphabetical order. A failing hook emits a warning but does not abort the run, so hooks are safe by default. Unix hooks are \texttt{*.sh} under bash; Windows hooks are \texttt{*.ps1} dot-sourced under PowerShell. +\subsection{Example: backup your dotfiles before every run} + \begin{lstlisting}[language=bashplus] # ~/.config/emerger/hooks/pre.d/10-backup-dotfiles.sh #!/usr/bin/env bash -rsync -a ~/.config/ ~/backups/dotfiles/ +set -e +rsync -a --delete ~/.config/ ~/backups/dotfiles/ \end{lstlisting} +\subsection{Example: Slack notification after every run} + +\begin{lstlisting}[language=bashplus] +# ~/.config/emerger/hooks/post.d/99-slack-notify.sh +#!/usr/bin/env bash +state=~/.local/state/emerger +tail -1 "$state/history.jsonl" | \ + curl -sS -X POST -H 'Content-Type: application/json' \ + --data-binary @- "$SLACK_WEBHOOK_URL" >/dev/null +\end{lstlisting} + +\subsection{Example: copy the last run log to the clipboard (Windows)} + +\begin{lstlisting}[language=psplus] +# %APPDATA%\emerger\hooks\post.d\10-log-to-clipboard.ps1 +$log = Join-Path $env:LOCALAPPDATA 'emerger\state\emerger.log' +Get-Content $log -Tail 40 | Set-Clipboard +\end{lstlisting} + +\subsection{Example: auto self-update before upgrading} + +\begin{lstlisting}[language=bashplus] +# ~/.config/emerger/hooks/pre.d/00-self-update.sh +#!/usr/bin/env bash +( cd "$(dirname "$(readlink -f "$(command -v up | awk '{print $NF}')")")/.." && git pull --ff-only ) || true +\end{lstlisting} + +\begin{warn} +Hooks run with the privileges that invoked \texttt{up}. A \texttt{pre.d} +hook that writes outside of \texttt{\$HOME} may silently fail until +\texttt{sudo} has been cached later in the run. If you need root-owned +side effects, write them in \texttt{post.d} and guard with +\texttt{sudo -n} or a \texttt{sudoers} entry. +\end{warn} + \subsection{Ignore list (Linux)} \verb|~/.config/emerger/ignore.list| accepts one package per line, with -\texttt{\#} comments. \texttt{pacman} honours it natively via -\texttt{-\/-ignore=}. For \texttt{apt}, \texttt{dnf} and \texttt{zypper} -the file is advisory: the user must still hold the packages through the -manager's native command (\texttt{apt-mark hold}, -\texttt{dnf versionlock add}, \texttt{zypper al}). +\texttt{\#} comments. Behaviour per manager: + +\begin{center} +\begin{tabular}{@{}p{0.15\linewidth} p{0.78\linewidth}@{}} +\toprule +\textbf{Manager} & \textbf{Behaviour} \\ +\midrule +\texttt{pacman} & Honoured natively via \texttt{--ignore=} on the + command line. \\ +\texttt{apt} & Advisory: you must still \texttt{apt-mark hold PKG}. \\ +\texttt{dnf} & Advisory: you must \texttt{dnf versionlock add PKG}. \\ +\texttt{zypper} & Advisory: you must \texttt{zypper al PKG}. \\ +\bottomrule +\end{tabular} +\end{center} \subsection{Quiet hours} \texttt{QUIET\_HOURS="HH:MM-HH:MM"} in \texttt{config.sh} makes scheduled runs that start inside the window exit immediately when \texttt{-y} is -set, i.e. the ones coming from the timer. Interactive invocations are -never blocked. +set (i.e. the ones coming from the timer). Interactive invocations are +never blocked. The window may cross midnight: \texttt{"23:00-07:00"} is +valid. + +%------------------------------------------------------- +\section{Manager plugins}\label{sec:plugins} +%------------------------------------------------------- + +Dropping a bash script in \verb|~/.config/emerger/managers.d/.sh| +registers a custom manager without touching the repository. + +\subsection{Minimal plugin} + +\begin{lstlisting}[language=bashplus] +# ~/.config/emerger/managers.d/mytool.sh +PM_PLUGIN_SLUG=mytool + +pm_mytool_detect() { command -v mytool >/dev/null 2>&1; } +pm_mytool_needs_sudo() { return 1; } # optional, default: no sudo +pm_mytool_parallel() { return 0; } # optional, default: serial +pm_mytool_dev() { return 1; } # optional, default: not --dev gated +pm_mytool_icon() { printf '\xf0\x9f\x94\x8c'; } # optional + +pm_mytool_run() { + run_cmd "mytool refresh" mytool refresh || return 1 + run_cmd "mytool upgrade" mytool upgrade -y || return 1 + return 0 +} +\end{lstlisting} + +\subsection{What you get for free} +Plugins are registered at the same level as native managers: they honour +\texttt{--only}, \texttt{--except}, \texttt{--parallel}, \texttt{--dev}, +the detection cache, the hooks and the summary. Because +\texttt{pm\_\_run} calls \texttt{run\_cmd}, your plugin +automatically gets: + +\begin{itemize} + \item \texttt{--dry-run} support; + \item retry on transient failures (\texttt{RETRY\_MAX}, \texttt{RETRY\_DELAY}); + \item logging to \verb|~/.local/state/emerger/emerger.log|; + \item live-log streaming under \texttt{-v}. +\end{itemize} + +A copy-pasteable template lives at \texttt{share/plugins/example.sh}. -\subsection{Manager plugins} -Dropping a bash script in \verb|~/.config/emerger/managers.d/.sh| -registers a custom manager without touching the repository. A minimal -plugin declares \texttt{pm\_\_detect} and \texttt{pm\_\_run}; -optional callbacks expose whether the manager needs sudo, can run in -parallel, is gated by \texttt{-\/-dev} and which icon to print. Plugins -honour \texttt{-\/-only}, \texttt{-\/-except}, \texttt{-\/-parallel}, -\texttt{-\/-dev}, the detection cache, hooks and the summary. A -copy-pasteable template is provided in -\texttt{share/plugins/example.sh}. Linux and macOS only. +\subsection{Detection cache} +The detection cache is keyed by manager slug and lives at +\verb|~/.cache/emerger/detected|. TTL defaults to 1 day; override via +\texttt{EMERGER\_CACHE\_TTL=} in \texttt{config.sh} (0 disables +caching entirely). After installing or removing a package manager run +\texttt{up -rc} to clear the cache. + +\begin{note} +Plugins are Linux and macOS only. Windows plugins are not yet supported. +\end{note} %------------------------------------------------------- -\section{Integration} +\section{Integration}\label{sec:integration} %------------------------------------------------------- \subsection{JSON output} -\texttt{up -\/-json} emits a single-line JSON object on stdout, with the -logo, info line and summary box suppressed. The same schema is what -\texttt{history.jsonl} stores one line at a time: +\texttt{up --json} emits a single-line JSON object on stdout. The logo, +info line and summary box are all suppressed, so the output is safe to +pipe into \texttt{jq} or consume from a CI job: -\begin{lstlisting}[language=bashplus] +\begin{lstlisting}[language=jsonplus] {"ts":"2026-04-14T07:24:31Z","duration":42,"freed_kb":15360, "errors":0,"reboot":0, "managers":[{"name":"apt","result":"ok"},{"name":"flatpak","result":"ok"}]} \end{lstlisting} +Every run also appends one such line to +\verb|~/.local/state/emerger/history.jsonl| (one JSON per line, a.k.a. +JSONL). Fields: + +\begin{center} +\begin{tabular}{@{}p{0.20\linewidth} p{0.72\linewidth}@{}} +\toprule +\textbf{Field} & \textbf{Meaning} \\ +\midrule +\texttt{ts} & ISO 8601 UTC timestamp of the run start \\ +\texttt{duration} & total wall-clock seconds \\ +\texttt{freed\_kb} & cache and trash bytes freed, in KiB \\ +\texttt{errors} & number of managers that returned non-zero \\ +\texttt{reboot} & 1 if a reboot is required, else 0 \\ +\texttt{managers} & array of \texttt{\{name, result\}} entries \\ +\bottomrule +\end{tabular} +\end{center} + \subsection{Prometheus metrics} -\texttt{up -\/-metrics FILE} reads the most recent entry of +\texttt{up --metrics FILE} reads the most recent entry of \texttt{history.jsonl} and writes a Prometheus textfile-collector -snapshot. Exposed gauges include -\texttt{emerger\_last\_run\_timestamp\_seconds}, -\texttt{emerger\_last\_run\_duration\_seconds}, -\texttt{emerger\_last\_run\_freed\_bytes}, -\texttt{emerger\_last\_run\_errors}, -\texttt{emerger\_reboot\_required} and one -\texttt{emerger\_manager\_ok\{manager="..."\}} per manager of the last -run. The flag does not trigger an update run; invoke it from a -\texttt{post.d} hook or from the scheduler after \texttt{up} completes. +snapshot. Exposed gauges: + +\begin{itemize} + \item \texttt{emerger\_last\_run\_timestamp\_seconds} + \item \texttt{emerger\_last\_run\_duration\_seconds} + \item \texttt{emerger\_last\_run\_freed\_bytes} + \item \texttt{emerger\_last\_run\_errors} + \item \texttt{emerger\_reboot\_required} + \item \texttt{emerger\_manager\_ok\{manager="..."\}} (one per manager) +\end{itemize} + +The flag does \emph{not} trigger an update run. Invoke it from a +\texttt{post.d} hook or from the scheduler after \texttt{up} has +completed: + +\begin{lstlisting}[language=bashplus] +# ~/.config/emerger/hooks/post.d/90-prom.sh +up --metrics /var/lib/node_exporter/textfile_collector/emerger.prom +\end{lstlisting} + +\subsection{Reboot exit code} +By default \texttt{up} exits 0 on success even when a reboot is pending +(the summary prints \texttt{REBOOT RECOMMENDED}). Pass +\texttt{--reboot-exit} to turn that into exit code \textbf{4} instead, +so an orchestrator can react: + +\begin{lstlisting}[language=bashplus] +up -y --reboot-exit +case $? in + 0) ;; # done, no reboot needed + 3) notify-send "eMerger: some managers failed" ;; + 4) systemctl reboot ;; # clean, reboot required +esac +\end{lstlisting} \subsection{Download-only and offline} -\texttt{-\/-download-only} (alias \texttt{-\/-offline}) refreshes the -package indexes and downloads the pending upgrade set but does not -install it. Supported natively on \texttt{pacman} (\texttt{-Syuw}), -\texttt{apt} (\texttt{-\/-download-only}), \texttt{dnf} -(\texttt{-\/-downloadonly}) and \texttt{zypper} -(\texttt{update -\/-download-only}). This is the safe prefetch option -for metered connections and for pre-staging maintenance windows. +\texttt{--download-only} (alias \texttt{--offline}) refreshes the package +indexes and \emph{downloads} the pending upgrade set but does not install +it. Supported natively on: + +\begin{center} +\begin{tabular}{@{}ll@{}} +\toprule +\textbf{Manager} & \textbf{Command} \\ +\midrule +\texttt{pacman} & \texttt{pacman -Syuw} \\ +\texttt{apt} & \texttt{apt-get upgrade --download-only} \\ +\texttt{dnf} & \texttt{dnf upgrade --downloadonly} \\ +\texttt{zypper} & \texttt{zypper update --download-only} \\ +\bottomrule +\end{tabular} +\end{center} + +Other managers ignore the flag. \subsection{Manager filtering} -\texttt{-\/-only LIST} restricts the run to the listed comma-separated -managers; \texttt{-\/-except LIST} excludes them. Filtering is applied -after detection and after \texttt{-\/-dev} / \texttt{-\/-firmware} -gating, and \texttt{-\/-except} always wins over \texttt{-\/-only} when -both mention the same name. +\begin{itemize} + \item \texttt{--only apt,flatpak} restricts the run to the listed + managers (comma-separated). + \item \texttt{--except snap,fwupd} runs everything that would normally + run, minus the listed managers. +\end{itemize} + +Filtering is applied after detection and after \texttt{--dev} / +\texttt{--firmware} gating, so: + +\begin{itemize} + \item \texttt{--only X} with \texttt{X} not detected is a no-op + (nothing runs). + \item \texttt{--except} always wins over \texttt{--only} when both + mention the same name. +\end{itemize} + +Compose with profiles (\texttt{up --profile work --only apt}) to restrict +a profile on the fly. %------------------------------------------------------- -\section{Auto-update (unattended)} +\section{Auto-update (unattended)}\label{sec:auto} %------------------------------------------------------- -\texttt{up -au} installs a weekly unattended run. On Linux the preferred -backend is a systemd user timer -(\verb|~/.config/systemd/user/emerger.{service,timer}|); cron is used as -fallback. On macOS cron is the default and \texttt{launchd} can be used -manually. On Windows a \texttt{Register-ScheduledTask -TaskName eMerger} -is created. The trigger fires weekly on Sunday at 10:00 with a -$\pm$ one-hour randomised delay, and always uses -\texttt{-y -q -nl -ni}. Pair with \texttt{QUIET\_HOURS} to keep the -machine quiet at night. + +\begin{lstlisting}[language=bashplus] +up -au # Linux / macOS +\end{lstlisting} +\begin{lstlisting}[language=psplus] +up -au # Windows +\end{lstlisting} + +Backends chosen automatically: + +\begin{itemize} + \item \textbf{Linux}: systemd user timer (preferred) at + \verb|~/.config/systemd/user/emerger.{service,timer}|; cron + fallback when \texttt{systemctl --user} is not available. + \item \textbf{macOS}: cron fallback via \texttt{crontab -l} (you can + use \texttt{launchd} manually if you prefer). + \item \textbf{Windows}: \texttt{Register-ScheduledTask -TaskName eMerger}. +\end{itemize} + +The trigger fires weekly on Sunday at 10:00 (local time) with $\pm$1h +randomised delay, and always uses \texttt{-y -q -nl -ni}. + +\subsection{Managing the schedule} + +\begin{lstlisting}[language=bashplus] +# Linux +systemctl --user status emerger.timer +systemctl --user stop emerger.timer +systemctl --user disable emerger.timer +\end{lstlisting} + +\begin{lstlisting}[language=psplus] +# Windows +Get-ScheduledTask eMerger +Unregister-ScheduledTask eMerger +\end{lstlisting} + +\begin{tip} +To avoid night-time runs, pair with \texttt{QUIET\_HOURS} in +\texttt{config.sh}. Scheduled runs started inside the window exit +immediately; interactive ones are unaffected. +\end{tip} %------------------------------------------------------- -\section{Files and paths} +\section{Cookbook}\label{sec:cookbook} +%------------------------------------------------------- + +Concrete, copy-pasteable recipes for common situations. + +\subsection{Daily driver (Linux desktop)} +\begin{lstlisting}[language=bashplus] +up -v +\end{lstlisting} +Simple. Live output, everything updated, cache and trash wiped at the +end. Add \texttt{--firmware} occasionally. + +\subsection{Unattended server} +Install the schedule once: + +\begin{lstlisting}[language=bashplus] +cat > ~/.config/emerger/config.sh <<'EOF' +ARG_SECURITY=1 +ARG_YES=1 +ARG_NO_CACHE=1 +ARG_NO_TRASH=1 +QUIET_HOURS="08:00-18:00" +EOF +up -au +\end{lstlisting} + +You now get weekly security-only updates outside working hours. Pair +with Prometheus: + +\begin{lstlisting}[language=bashplus] +# post.d hook +up --metrics /var/lib/node_exporter/textfile_collector/emerger.prom +\end{lstlisting} + +\subsection{Developer workstation} +Everything, every time - including dev toolchains and firmware: + +\begin{lstlisting}[language=bashplus] +up --dev --firmware --parallel -v +\end{lstlisting} + +Or as a profile: + +\begin{lstlisting}[language=bashplus] +up --profile home +\end{lstlisting} + +\subsection{Pre-demo machine} +The day before a presentation you want security patches but no big user +downloads and definitely no reboots: + +\begin{lstlisting}[language=bashplus] +up --profile safe +\end{lstlisting} + +\subsection{Metered / mobile connection} +Prefetch when you're on Wi-Fi: + +\begin{lstlisting}[language=bashplus] +up --download-only -y +\end{lstlisting} + +Then, later, without network: + +\begin{lstlisting}[language=bashplus] +up -y +\end{lstlisting} + +Native package managers will use the local cache populated by the +earlier run. + +\subsection{CI runner / container image builder} +\begin{lstlisting}[language=bashplus] +up --only apt -y -qq --reboot-exit +rc=$? +if (( rc == 4 )); then echo "reboot required"; exit 0; fi +exit $rc +\end{lstlisting} + +\subsection{Gated maintenance window} +Snapshot, update, rollback on failure, reboot on success: + +\begin{lstlisting}[language=bashplus] +set -e +up --snapshot -y || { up --rollback; exit 1; } +up -y --reboot-exit +if [[ $? -eq 4 ]]; then systemctl reboot; fi +\end{lstlisting} + +\subsection{Slack-notified runs} +\begin{lstlisting}[language=bashplus] +# ~/.config/emerger/hooks/post.d/99-slack.sh +#!/usr/bin/env bash +state=~/.local/state/emerger +payload=$(tail -1 "$state/history.jsonl") +curl -sS -X POST -H 'Content-Type: application/json' \ + -d "{\"text\":\"eMerger: $payload\"}" "$SLACK_WEBHOOK_URL" +\end{lstlisting} + +\subsection{macOS with Homebrew only} +\begin{lstlisting}[language=bashplus] +up --only brew,mas -v +\end{lstlisting} + +\subsection{Windows without Chocolatey} +\begin{lstlisting}[language=psplus] +up --except choco -v +\end{lstlisting} + +\subsection{Audit a single package} +Is a specific package about to change? Preview the plan and read its +upstream changelog: + +\begin{lstlisting}[language=bashplus] +up -n | grep -i firefox +up --changelog firefox +\end{lstlisting} + +\subsection{Pinning a package (Linux)} +Add to \verb|~/.config/emerger/ignore.list|: + +\begin{lstlisting}[language=bashplus] +# ~/.config/emerger/ignore.list +nvidia-driver-535 +\end{lstlisting} + +Then, for \texttt{apt}: + +\begin{lstlisting}[language=bashplus] +sudo apt-mark hold nvidia-driver-535 +\end{lstlisting} + +(pacman respects the file natively.) + +%------------------------------------------------------- +\section{Security model}\label{sec:security} +%------------------------------------------------------- + +\begin{itemize} + \item eMerger is a client-side tool. It has no network listener, no + daemon, no persistent background process. + \item It reads and writes only three locations: its config dir + (\verb|~/.config/emerger/|), its cache dir + (\verb|~/.cache/emerger/|) and its state dir + (\verb|~/.local/state/emerger/|), plus the global lock at + \verb|/tmp/emerger.lock| on Unix. + \item \texttt{sudo} credentials are cached by \texttt{sudo} itself, not + by eMerger. When the run ends, the cached credentials expire on + the usual \texttt{sudo} schedule (5 minutes by default). + \item On Windows, UAC elevation happens \emph{only} when a detected + manager actually needs admin. The elevation is logged. + \item Hooks and plugins run as the invoking user. They can do anything + the user can do - pin them to inodes you trust. + \item The only network calls eMerger itself makes are (a) the optional + weather widget via \texttt{wttr.in}, (b) \texttt{git pull} during + \texttt{--self-update}, (c) \texttt{fwupdmgr refresh} when + \texttt{--firmware} is active. Everything else is delegated to + the package manager you asked for. + \item There is no telemetry. \texttt{history.jsonl} stays on your + machine unless a hook you wrote ships it elsewhere. +\end{itemize} + +%------------------------------------------------------- +\section{Files and paths}\label{sec:files} %------------------------------------------------------- \paragraph{Linux and macOS} \begin{center} -\begin{tabular}{@{}p{0.45\linewidth} p{0.45\linewidth}@{}} +\begin{tabular}{@{}p{0.44\linewidth} p{0.50\linewidth}@{}} \toprule \textbf{Path} & \textbf{Purpose} \\ \midrule @@ -544,19 +1518,22 @@ \section{Files and paths} \verb|~/.config/emerger/profiles.d/| & User profiles \\ \verb|~/.config/emerger/hooks/{pre,post}.d/| & Hook scripts \\ \verb|~/.config/emerger/ignore.list| & Ignore list (pacman native) \\ -\verb|~/.config/emerger/managers.d/*.sh| & User-defined manager plugins \\ +\verb|~/.config/emerger/managers.d/*.sh| & User manager plugins \\ \verb|~/.cache/emerger/detected| & Detection cache \\ \verb|~/.local/state/emerger/emerger.log| & Log (rotated at 2000 lines) \\ \verb|~/.local/state/emerger/history.jsonl| & One JSON record per run \\ +\verb|~/.local/state/emerger/pkgs.before| & Package list snapshot (pre) \\ +\verb|~/.local/state/emerger/pkgs.after| & Package list snapshot (post) \\ +\verb|~/.local/state/emerger/pkgs.diff| & Last-run package diff \\ \verb|~/.local/state/emerger/resume| & Resume cursor \\ -\verb|/tmp/emerger.lock| & Global lock (\texttt{flock}) \\ +\verb|/tmp/emerger.lock| & Global lock (flock) \\ \bottomrule \end{tabular} \end{center} \paragraph{Windows} \begin{center} -\begin{tabular}{@{}p{0.45\linewidth} p{0.45\linewidth}@{}} +\begin{tabular}{@{}p{0.44\linewidth} p{0.50\linewidth}@{}} \toprule \textbf{Path} & \textbf{Purpose} \\ \midrule @@ -571,58 +1548,26 @@ \section{Files and paths} \end{center} %------------------------------------------------------- -\section{Source tree} -%------------------------------------------------------- -The Bash and PowerShell implementations share the same layering: -argument parsing, UI, logging, locking and per-manager dispatch are each -isolated in their own file. - -\paragraph{Bash (\texttt{src/lib/})} -\texttt{args.sh}, \texttt{changelog.sh}, \texttt{clean.sh}, -\texttt{diff.sh}, \texttt{disk.sh}, \texttt{doctor.sh}, -\texttt{estimate.sh}, \texttt{hooks.sh}, \texttt{ignore.sh}, -\texttt{lock.sh}, \texttt{log.sh}, \texttt{metrics.sh}, -\texttt{mirrors.sh}, \texttt{notify.sh}, \texttt{packages.sh}, -\texttt{plugins.sh}, \texttt{profiles.sh}, \texttt{progress.sh}, -\texttt{reboot.sh}, \texttt{report.sh}, \texttt{resume.sh}, -\texttt{retry.sh}, \texttt{run.sh}, \texttt{snapshot.sh}, -\texttt{summary.sh}, \texttt{sys.sh}, \texttt{tui.sh}, -\texttt{ui.sh}, \texttt{update.sh}, \texttt{wizard.sh}, -\texttt{help.txt}. - -\paragraph{PowerShell (\texttt{src/pslib/})} -\texttt{Args.ps1}, \texttt{Clean.ps1}, \texttt{Doctor.ps1}, -\texttt{Hooks.ps1}, \texttt{Log.ps1}, \texttt{Notify.ps1}, -\texttt{Packages.ps1}, \texttt{Profiles.ps1}, \texttt{Summary.ps1}, -\texttt{Sys.ps1}, \texttt{UI.ps1}, \texttt{Update.ps1}, -\texttt{Help.txt}. - -Adding a new package manager means extending -\texttt{src/lib/packages.sh} on the Unix side or -\texttt{src/pslib/Packages.ps1} on the Windows side; both are -table-driven dispatchers. - -%------------------------------------------------------- -\section{Supported package managers} +\section{Supported package managers}\label{sec:managers} %------------------------------------------------------- \begin{itemize} - \item \textbf{Linux, system (sudo):} \texttt{pacman}, \texttt{apt}, + \item \textbf{Linux, system (need sudo):} \texttt{pacman}, \texttt{apt}, \texttt{apt-get}, \texttt{dnf}, \texttt{yum}, \texttt{zypper}, \texttt{xbps}, \texttt{apk}, \texttt{eopkg}, \texttt{emerge}, \texttt{nixos-rebuild}, \texttt{fwupdmgr}, \texttt{snap}. \item \textbf{Linux, AUR (no sudo):} \texttt{yay}, \texttt{paru}. \item \textbf{Linux, user-space:} \texttt{flatpak}, \texttt{nix-env}. - \item \textbf{macOS:} \texttt{softwareupdate}, \texttt{brew}, - \texttt{brew --cask}, \texttt{mas}. - \item \textbf{Windows:} \texttt{winget}, \texttt{scoop}, - \texttt{choco}, \texttt{PSWindowsUpdate}, \texttt{wsl --update}. - \item \textbf{Dev toolchains (all platforms, opt-in):} \texttt{rustup}, - \texttt{cargo install-update}, \texttt{npm}, \texttt{pnpm}, - \texttt{pip}, \texttt{gem}. + \item \textbf{macOS:} \texttt{softwareupdate} (native), + \texttt{brew}, \texttt{brew --cask}, \texttt{mas}. + \item \textbf{Windows:} \texttt{winget}, \texttt{scoop}, \texttt{choco}, + \texttt{PSWindowsUpdate}, \texttt{wsl --update}. + \item \textbf{Dev toolchains} (all platforms, opt-in with + \texttt{--dev}): \texttt{rustup}, \texttt{cargo install-update}, + \texttt{npm}, \texttt{pnpm}, \texttt{pip}, \texttt{gem}. \end{itemize} %------------------------------------------------------- -\section{Exit codes} +\section{Exit codes}\label{sec:exit} %------------------------------------------------------- \begin{center} \begin{tabular}{@{}cl@{}} @@ -633,38 +1578,319 @@ \section{Exit codes} 1 & Runtime failure (sudo, lock, disk, interrupted) \\ 2 & Argument parsing error \\ 3 & One or more package managers returned non-zero \\ -4 & Reboot required (only with \texttt{-\/-reboot-exit}) \\ +4 & Reboot required (only with \texttt{--reboot-exit}) \\ \bottomrule \end{tabular} \end{center} +Useful idioms: + +\begin{lstlisting}[language=bashplus] +up -y -q || case $? in + 3) notify-send "eMerger: some managers failed" ;; + *) logger -t eMerger "fatal $?" ;; +esac +\end{lstlisting} + +\begin{lstlisting}[language=psplus] +up -y -q +if ($LASTEXITCODE -eq 3) { Write-Warning "Some managers failed" } +\end{lstlisting} + %------------------------------------------------------- -\section{Troubleshooting} +\section{Troubleshooting}\label{sec:trouble} %------------------------------------------------------- -\textbf{Another eMerger run is in progress.} A stale \texttt{flock} on -\verb|/tmp/emerger.lock|. Inspect \texttt{ps} for stragglers, then -remove the lock file. -\textbf{A manager fails with exit code 3.} Run \texttt{up -\/-errors} -to tail the log, then \texttt{up -\/-doctor} to inspect the environment. -Most failures come from a manager's own health state (for example -\texttt{dpkg} being interrupted); run the native repair command before -retrying. +\paragraph{``Another eMerger run is in progress''.} +A stale \texttt{flock} on \verb|/tmp/emerger.lock|. Inspect \texttt{ps} +for stragglers, then remove the lock file. + +\paragraph{A manager fails with exit code 3.} +Run \texttt{up --errors} to tail the log, then \texttt{up --doctor} to +inspect the environment. Most failures come from a manager's own health +state (for example \texttt{dpkg} interrupted); run the native repair +command (\texttt{sudo dpkg --configure -a}, \texttt{sudo pacman -Dk}) +before retrying. -\textbf{Nothing happens on scheduled runs.} Check -\texttt{systemctl -\/-user status emerger.timer} or the Windows Task +\paragraph{Nothing happens on scheduled runs.} +Check \texttt{systemctl --user status emerger.timer} or the Windows Task Scheduler entry. On Unix the scheduled run always uses \texttt{-y -q -nl -ni}; enable \texttt{-v} in the unit for one cycle to -see the output. +see the output. On Linux systemd user timers do not fire if no session is +open unless \texttt{loginctl enable-linger} has been run for the user. + +\paragraph{Emoji renders as boxes or question marks.} +The terminal font does not include Unicode ranges eMerger uses. Either +pass \texttt{--no-emoji}, set \texttt{ARG\_NO\_EMOJI=1} in +\texttt{config.sh}, or switch to a Unicode-capable font. + +\paragraph{Spinner disappears on terminal resize.} +Harmless. The live-log width recomputes every 120\,ms. + +\paragraph{\texttt{up --self-update} aborts with ``non fast-forward''.} +You have local commits on top of \texttt{main}. Rebase or reset them +manually; eMerger refuses to clobber local work. + +\paragraph{\texttt{notify-send} (Linux) never shows a notification.} +No \texttt{DISPLAY} / \texttt{WAYLAND\_DISPLAY} in the environment +(typical for cron). Use a systemd user timer instead: it inherits the +session. Alternatively, write a \texttt{post.d} hook that notifies your +own channel (Slack, Telegram, Discord, email). + +\paragraph{(Windows) ``up : The term `up' is not recognized''.} +Your PowerShell profile did not load. Run \texttt{. \$PROFILE} or open +a new window. If still missing, re-run \texttt{.\textbackslash setup.ps1}. + +\paragraph{(Windows) ``cannot be loaded because running scripts is disabled''.} +\texttt{ExecutionPolicy} is \texttt{Restricted}. Lift it for the user: + +\begin{lstlisting}[language=psplus] +Set-ExecutionPolicy -Scope CurrentUser RemoteSigned +\end{lstlisting} + +\paragraph{(Windows) Elevation fails silently.} +You canceled the UAC prompt. The script logs \texttt{relaunching +elevated} and exits: the elevated window does the actual work. + +\paragraph{Pacman keeps asking about ignored packages.} +\texttt{ignore.list} is passed as \texttt{--ignore=}; \texttt{pacman} +still prints the warning line. This is upstream behaviour, not an +eMerger bug. + +\paragraph{``command not found: gum'' or ``whiptail''.} +The interactive menu (\texttt{-i}) falls back to a plain-read loop when +neither tool is installed. Install \texttt{gum} +(\url{https://github.com/charmbracelet/gum}) for a nicer UI, or ignore +the warning. + +%------------------------------------------------------- +\section{Frequently asked questions}\label{sec:faq} +%------------------------------------------------------- + +\paragraph{Is eMerger safe for production servers?} +Yes, but use it in ``security only, unattended'' mode: +\verb|up --profile server| (or its inlined equivalent). The +\texttt{--reboot-exit} idiom lets your orchestrator decide when to +reboot. + +\paragraph{Does \texttt{up} install packages I don't already have?} +No. \texttt{up} only invokes managers that are already installed and +only asks them to upgrade what is already installed. No new software is +added unless a package upgrade pulls a new dependency in. + +\paragraph{Does \texttt{up} reboot my machine?} +Only with \texttt{--reboot}. Without it, the summary prints a reboot +advisory and the run exits normally. + +\paragraph{Can I use \texttt{up} without \texttt{sudo}?} +Yes, in user-only mode: \verb|up --only flatpak,brew,npm,pip,cargo| +(adjust to what you have). User-level managers never need elevation. + +\paragraph{Why is my terminal flashing during the parallel run?} +Under \texttt{--parallel} each user-space manager streams its own +output; when \texttt{-v} is not set, output is buffered and flushed at +the end. If you want a calm terminal, drop \texttt{-v} or narrow the +parallel set with \texttt{--only}. + +\paragraph{Can I use \texttt{up} inside a Docker image build?} +Yes. Use \verb|up --only apt -y -qq| (or the relevant manager) and +ignore the reboot advisory. Avoid \texttt{--firmware}, \texttt{--snapshot} +and interactive flags. + +\paragraph{What happens if two \texttt{up} runs start at the same time?} +The second one aborts with exit code 1 (``Another eMerger run is in +progress''). The lock is a plain \texttt{flock} on +\verb|/tmp/emerger.lock|. + +\paragraph{How do I completely remove eMerger?} +Run the uninstaller, then: + +\begin{lstlisting}[language=bashplus] +rm -rf ~/.config/emerger ~/.cache/emerger ~/.local/state/emerger +rm -rf /path/to/eMerger # the repo itself +\end{lstlisting} + +\paragraph{Where is my data?} +All local, all in the paths listed in section \ref{sec:files}. Nothing +leaves your machine unless a hook you wrote ships it. + +\paragraph{Can I contribute a new package manager?} +Absolutely - see section \ref{sec:dev}. Most contributions are a 20-line +dispatch branch plus a test case. %------------------------------------------------------- -\section{Contributing} +\section{Glossary}\label{sec:glossary} %------------------------------------------------------- + +\begin{itemize} + \item \textbf{Dry-run} - a simulation: the tool prints the commands it + would run without actually running them. + \item \textbf{Hook} - a user script that runs before (\texttt{pre.d}) + or after (\texttt{post.d}) the update flow. + \item \textbf{Manager (package manager)} - software such as + \texttt{apt}, \texttt{pacman}, \texttt{brew}, \texttt{winget} + that installs, upgrades and removes programs on your machine. + \item \textbf{Parallel mode} - concurrent execution of user-space + managers. Safer than it sounds, because user-space managers do + not share a lock. + \item \textbf{Plugin} - a user-provided manager definition. Registers + a new manager without modifying the repository. + \item \textbf{Profile} - a named bundle of default flags, loaded via + \texttt{--profile NAME}. + \item \textbf{Resume cursor} - a file that records which managers + completed successfully, consumed by \texttt{--resume}. + \item \textbf{Snapshot} - a read-only filesystem checkpoint taken + before the upgrade. Linux only + (snapper/timeshift/btrfs). + \item \textbf{TUI} - Terminal User Interface. The interactive menu + (\texttt{-i}) on Unix. + \item \textbf{UAC} - User Account Control, the Windows elevation + prompt. eMerger relaunches itself elevated when needed. +\end{itemize} + +%------------------------------------------------------- +\section{Development}\label{sec:dev} +%------------------------------------------------------- + +\subsection{Repository layout} + +\begin{lstlisting}[basicstyle=\ttfamily\footnotesize] +eMerger/ + src/ + emerger.sh # Unix entry (Linux + macOS) + emerger.ps1 # Windows entry + lib/ # bash libs + pslib/ # PowerShell libs + logo/ + share/profiles/ # shipped profiles (*.sh + *.ps1) + share/plugins/ # example plugins + completions/ # bash/zsh/fish completions + tests/ # bats tests + man/up.1 # man page + setup.sh setup.ps1 + uninstall.sh uninstall.ps1 + update.sh update.ps1 + VERSION + .github/workflows/ci.yml +\end{lstlisting} + +\subsection{Bash library modules (\texttt{src/lib/})} + +\begin{center} +\begin{longtable}{@{}p{0.25\linewidth} p{0.70\linewidth}@{}} +\toprule +\textbf{File} & \textbf{Role} \\ +\midrule \endhead +\texttt{ui.sh} & Colors, glyphs, spinner, box, live-log monitor \\ +\texttt{log.sh} & Structured logging (rotated at 2000 lines) \\ +\texttt{sys.sh} & OS / shell / battery / disk detection \\ +\texttt{run.sh} & Command runner (dry-run, retry, progress) \\ +\texttt{args.sh} & Argument parser and short-bundle expander \\ +\texttt{packages.sh} & Per-manager dispatcher \\ +\texttt{clean.sh} & Cache and trash cleaners \\ +\texttt{hooks.sh} & User hook runner \\ +\texttt{update.sh} & Self-update + cron / timer setup \\ +\texttt{notify.sh} & Desktop notifications \\ +\texttt{summary.sh} & Final banner, history persistence \\ +\texttt{tui.sh} & Interactive menu \\ +\texttt{lock.sh} & Global \texttt{flock} \\ +\texttt{retry.sh} & Retry on transient failures \\ +\texttt{reboot.sh} & Reboot-required detection \\ +\texttt{diff.sh} & Package snapshots + diff \\ +\texttt{disk.sh} & Disk-space precheck \\ +\texttt{snapshot.sh} & snapper / timeshift / btrfs \\ +\texttt{mirrors.sh} & Mirror rank / refresh \\ +\texttt{resume.sh} & Resume cursor \\ +\texttt{doctor.sh} & \texttt{--doctor} \\ +\texttt{changelog.sh} & \texttt{--changelog PKG} \\ +\texttt{report.sh} & Markdown export \\ +\texttt{wizard.sh} & First-run wizard \\ +\texttt{profiles.sh} & Profile loader \\ +\texttt{progress.sh} & Output summary + highlight \\ +\texttt{estimate.sh} & Step ETA from history \\ +\texttt{ignore.sh} & Ignore list loader \\ +\texttt{plugins.sh} & User plugin loader \\ +\texttt{metrics.sh} & Prometheus textfile export \\ +\texttt{help.txt} & \texttt{up --help} content \\ +\bottomrule +\end{longtable} +\end{center} + +\subsection{PowerShell library modules (\texttt{src/pslib/})} + +\begin{center} +\begin{tabular}{@{}p{0.25\linewidth} p{0.70\linewidth}@{}} +\toprule +\textbf{File} & \textbf{Role} \\ +\midrule +\texttt{UI.ps1} & Colors, glyphs, box, step \\ +\texttt{Log.ps1} & Structured logging \\ +\texttt{Sys.ps1} & OS, admin, battery, disk, UAC elevation \\ +\texttt{Args.ps1} & Arg parser (shift + regex) \\ +\texttt{Packages.ps1} & Manager dispatcher + \texttt{Run-Cmd} \\ +\texttt{Clean.ps1} & \texttt{\%TEMP\%} and Recycle Bin \\ +\texttt{Hooks.ps1} & \texttt{hooks\textbackslash \{pre,post\}.d\textbackslash *.ps1} \\ +\texttt{Update.ps1} & \texttt{git pull} self-update + Task Scheduler \\ +\texttt{Notify.ps1} & BurntToast (optional) \\ +\texttt{Summary.ps1} & Final box, history, reboot detection \\ +\texttt{Doctor.ps1} & \texttt{--doctor} \\ +\texttt{Profiles.ps1} & Profile loader \\ +\texttt{Help.txt} & Help text \\ +\bottomrule +\end{tabular} +\end{center} + +\subsection{Running tests} + +\begin{lstlisting}[language=bashplus] +sudo apt-get install bats shellcheck +bats tests/ +shellcheck -S error src/emerger.sh src/lib/*.sh setup.sh uninstall.sh update.sh +\end{lstlisting} + +Both run on push via \texttt{.github/workflows/ci.yml}. + +\subsection{Adding a package manager} + +\paragraph{Unix} - edit \texttt{src/lib/packages.sh}: + +\begin{enumerate} + \item Add the name to \texttt{PKG\_MANAGERS}. + \item Add a branch in \texttt{\_pkg\_detect\_raw}. + \item Add a branch in \texttt{pkg\_run} with \texttt{run\_cmd} calls. + \item If the manager does not need sudo, exclude it from + \texttt{pkg\_needs\_sudo}. + \item Optional: add an emoji in \texttt{pkg\_icon}, a regex in + \texttt{progress.sh} to parse its output, a completion entry. +\end{enumerate} + +\paragraph{Windows} - edit \texttt{src/pslib/Packages.ps1}: + +\begin{enumerate} + \item Add the name to \texttt{\$script:PKG\_MANAGERS} (or + \texttt{PKG\_DEV}). + \item Add a \texttt{Pkg-Detect} case. + \item Add a \texttt{Pkg-Run} case with \texttt{Run-Cmd} calls. + \item If it needs admin, add it to \texttt{Pkg-Need-Admin}. +\end{enumerate} + +Both files are table-driven dispatchers; most contributions end up being +a twenty-line patch plus a test case under \texttt{tests/}. + +\subsection{Contributing} Pull requests and issues are welcome on \href{https://github.com/MasterCruelty/eMerger}{GitHub}. Before opening -a PR, run the test suite in \texttt{tests/} on the platform you are -touching, and make sure the feature is covered on both the Bash and the -PowerShell sides when it makes sense for both platforms. +a PR: + +\begin{itemize} + \item Run the test suite in \texttt{tests/} on the platform you + touched. + \item Attach \texttt{up --doctor} output and the relevant chunk of the + log when reporting bugs. + \item Keep feature parity in mind: when a feature makes sense on both + Bash and PowerShell, please implement it on both sides or flag + it for follow-up. +\end{itemize} \vspace{1em} \hrule