diff --git a/.forgejo/workflows/release.yml b/.forgejo/workflows/release.yml new file mode 100644 index 0000000..ff3f0c2 --- /dev/null +++ b/.forgejo/workflows/release.yml @@ -0,0 +1,53 @@ +name: release + +on: + push: + tags: ["v*"] + +env: + DL_DIR: /srv/breadway-dl + ECOSYSTEM_DIR: /tmp/bread-ecosystem-ci + PATH: /home/breadway/.cargo/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin + +jobs: + build: + runs-on: hestia + defaults: + run: + working-directory: /tmp/breadpaper-build + + steps: + - name: checkout + working-directory: /tmp + run: | + rm -rf /tmp/breadpaper-build + git clone --branch "${GITHUB_REF_NAME}" --depth 1 \ + "https://git.breadway.dev/${GITHUB_REPOSITORY}.git" /tmp/breadpaper-build + + - name: build + run: /home/breadway/.cargo/bin/cargo build --release --locked + + - name: test + run: /home/breadway/.cargo/bin/cargo test --release --locked + + - name: prepare artifacts + run: | + VERSION="${GITHUB_REF_NAME#v}" + PKG_DIR="${DL_DIR}/breadpaper/${VERSION}" + mkdir -p "${PKG_DIR}" + cp target/release/breadpaper "${PKG_DIR}/breadpaper-x86_64" + strip "${PKG_DIR}/breadpaper-x86_64" + sha256sum "${PKG_DIR}/breadpaper-x86_64" | awk '{print $1}' \ + > "${PKG_DIR}/breadpaper-x86_64.sha256" + cp bakery.toml "${PKG_DIR}/bakery.toml" + ln -sfn "${VERSION}" "${DL_DIR}/breadpaper/latest" + + - name: ensure bread-ecosystem + working-directory: /tmp + run: | + rm -rf "${ECOSYSTEM_DIR}" + git clone https://github.com/Breadway/bread-ecosystem.git "${ECOSYSTEM_DIR}" + + - name: regenerate index.json + working-directory: /tmp + run: bash "${ECOSYSTEM_DIR}/scripts/gen-index.sh" diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml deleted file mode 100644 index fe0f52d..0000000 --- a/.github/workflows/release.yml +++ /dev/null @@ -1,61 +0,0 @@ -name: release - -on: - push: - tags: ["v*"] - -permissions: - contents: write - -env: - DL_DIR: /srv/breadway-dl - ECOSYSTEM_DIR: /home/breadway/Projects/bread-ecosystem - -jobs: - build: - runs-on: [self-hosted, hestia] - steps: - - uses: actions/checkout@v4 - - - name: build - run: cargo build --release --locked - - - name: test - run: cargo test --release --locked - - - name: prepare artifacts - run: | - VERSION="${GITHUB_REF_NAME#v}" - PKG_DIR="${DL_DIR}/breadpaper/${VERSION}" - mkdir -p "${PKG_DIR}" - cp target/release/breadpaper "${PKG_DIR}/breadpaper-x86_64" - strip "${PKG_DIR}/breadpaper-x86_64" - sha256sum "${PKG_DIR}/breadpaper-x86_64" | awk '{print $1}' \ - > "${PKG_DIR}/breadpaper-x86_64.sha256" - cp bakery.toml "${PKG_DIR}/bakery.toml" - ln -sfn "${VERSION}" "${DL_DIR}/breadpaper/latest" - - - name: ensure bread-ecosystem - run: | - if [[ -d "${ECOSYSTEM_DIR}/.git" ]]; then - git -C "${ECOSYSTEM_DIR}" pull --ff-only - else - mkdir -p "$(dirname "${ECOSYSTEM_DIR}")" - git clone https://github.com/Breadway/bread-ecosystem.git "${ECOSYSTEM_DIR}" - fi - - - name: regenerate index.json - run: bash "${ECOSYSTEM_DIR}/scripts/gen-index.sh" - - - name: upload to GitHub Release - env: - GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} - run: | - VERSION="${GITHUB_REF_NAME#v}" - PKG_DIR="${DL_DIR}/breadpaper/${VERSION}" - gh release create "${GITHUB_REF_NAME}" \ - --title "breadpaper v${VERSION}" --generate-notes 2>/dev/null || true - gh release upload "${GITHUB_REF_NAME}" \ - "${PKG_DIR}/breadpaper-x86_64" \ - "${PKG_DIR}/breadpaper-x86_64.sha256" \ - --clobber diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..373e4ee --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2026 Breadway + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/src/main.rs b/src/main.rs index 38d3fc6..7616f31 100644 --- a/src/main.rs +++ b/src/main.rs @@ -4,19 +4,23 @@ use std::process; use clap::{Parser, Subcommand}; #[derive(Parser)] -#[command(name = "breadpaper", about = "Wallpaper manager for the bread desktop")] +#[command( + name = "breadpaper", + version, + about = "Wallpaper manager for the bread desktop" +)] struct Cli { + /// Image file to set as wallpaper (shorthand for `set`) + path: Option, + #[command(subcommand)] - command: Command, + command: Option, } #[derive(Subcommand)] enum Command { /// Set wallpaper, generate pywal palette, and reload bread themes - Set { - /// Path to the image file - path: PathBuf, - }, + Set { path: PathBuf }, /// Print the current wallpaper path Get, } @@ -24,9 +28,11 @@ enum Command { fn main() { let cli = Cli::parse(); - let result = match cli.command { - Command::Set { path } => breadpaper::set(&path), - Command::Get => breadpaper::get().map(|p| println!("{}", p.display())), + let result = match (cli.command, cli.path) { + (Some(Command::Set { path }), _) | (None, Some(path)) => breadpaper::set(&path), + (Some(Command::Get), _) | (None, None) => { + breadpaper::get().map(|p| println!("{}", p.display())) + } }; if let Err(e) = result { diff --git a/src/wallpaper.rs b/src/wallpaper.rs index 4655308..f59fae1 100644 --- a/src/wallpaper.rs +++ b/src/wallpaper.rs @@ -5,13 +5,13 @@ use anyhow::{Context, Result, bail}; pub fn apply(path: &Path) -> Result<()> { let status = Command::new("awww") - .arg("set") + .arg("img") .arg(path) .status() .context("failed to run awww — is awww-daemon running?")?; if !status.success() { - bail!("awww set exited with {}", status); + bail!("awww img exited with {}", status); } Ok(()) }