diff --git a/.github/workflows/deployment.yml b/.github/workflows/deployment.yml deleted file mode 100644 index bb3461c..0000000 --- a/.github/workflows/deployment.yml +++ /dev/null @@ -1,121 +0,0 @@ -name: deployment - -on: - push: - tags: - - v* - -jobs: - create_release: - runs-on: ubuntu-latest - outputs: - upload_url: ${{ steps.create_release.outputs.upload_url }} - steps: - - name: Create release - id: create_release - uses: actions/create-release@v1 - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - with: - tag_name: ${{ github.ref }} - release_name: ${{ github.ref }} - draft: false - prerelease: false - deploy_linux_macos_windows_github: - runs-on: ${{ matrix.os }} - needs: create_release - strategy: - fail-fast: false - matrix: - include: - - os: ubuntu-latest - os_name: linux - - os: macos-latest - os_name: macos - - os: windows-latest - os_name: windows - steps: - - name: Checkout code - uses: actions/checkout@v2 - - name: Install rust - uses: actions-rs/toolchain@v1 - with: - profile: minimal - toolchain: stable - override: true - - name: Check project - uses: actions-rs/cargo@v1 - with: - command: check - - name: Builds release - uses: actions-rs/cargo@v1 - with: - command: build - args: --release - - name: Compress executable (unix) - if: matrix.os_name == 'linux' || matrix.os_name == 'macos' - run: | - mkdir -p target/release/{man,completions} - target/release/himalaya man target/release/man - target/release/himalaya completion bash > target/release/completions/himalaya.bash - target/release/himalaya completion elvish > target/release/completions/himalaya.elvish - target/release/himalaya completion fish > target/release/completions/himalaya.fish - target/release/himalaya completion powershell > target/release/completions/himalaya.powershell - target/release/himalaya completion zsh > target/release/completions/himalaya.zsh - tar czf himalaya.tar.gz -C target/release himalaya man completions - - name: Compress executable (windows) - if: matrix.os_name == 'windows' - run: | - mkdir -p target/release/{man,completions} - target/release/himalaya.exe man target/release/man - target/release/himalaya.exe completion bash > target/release/completions/himalaya.bash - target/release/himalaya.exe completion elvish > target/release/completions/himalaya.elvish - target/release/himalaya.exe completion fish > target/release/completions/himalaya.fish - target/release/himalaya.exe completion powershell > target/release/completions/himalaya.powershell - target/release/himalaya.exe completion zsh > target/release/completions/himalaya.zsh - tar czf himalaya.tar.gz -C target/release himalaya.exe man completions - - name: Upload release asset - uses: actions/upload-release-asset@v1 - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - with: - upload_url: ${{ needs.create_release.outputs.upload_url }} - asset_path: himalaya.tar.gz - asset_name: himalaya-${{ matrix.os_name }}.tar.gz - asset_content_type: application/gzip - deploy_musl_github: - runs-on: ubuntu-latest - needs: create_release - steps: - - name: Checkout code - uses: actions/checkout@v2 - - name: Build release - run: | - docker run -v "${PWD}:/volume" --rm -t clux/muslrust:stable cargo build --release - - name: Compress executable - run: tar czf himalaya.tar.gz -C target/x86_64-unknown-linux-musl/release himalaya - - name: Upload release asset - uses: actions/upload-release-asset@v1 - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - with: - upload_url: ${{ needs.create_release.outputs.upload_url }} - asset_path: himalaya.tar.gz - asset_name: himalaya-musl.tar.gz - asset_content_type: application/gzip - deploy_crates: - runs-on: ubuntu-latest - needs: create_release - environment: deployment - steps: - - name: Checkout code - uses: actions/checkout@v2 - - name: Install rust - uses: actions-rs/toolchain@v1 - with: - profile: minimal - toolchain: stable - override: true - - uses: katyo/publish-crates@v1 - with: - registry-token: ${{ secrets.CARGO_REGISTRY_TOKEN }} diff --git a/.github/workflows/nix.yml b/.github/workflows/nix.yml deleted file mode 100644 index 46069ef..0000000 --- a/.github/workflows/nix.yml +++ /dev/null @@ -1,38 +0,0 @@ -name: nix - -on: - pull_request: - push: - branches: - - master - -jobs: - nix-build: - runs-on: ubuntu-latest - steps: - - name: Checkouts code - uses: actions/checkout@v3 - - - name: Caches Nix store - uses: actions/cache@v3 - id: nix-cache - with: - path: /tmp/nix-cache - key: nix-${{ hashFiles('**/flake.*') }} - - - name: Installs Nix - uses: cachix/install-nix-action@v18 - with: - extra_nix_config: | - experimental-features = nix-command flakes - - - name: Imports Nix store cache - if: ${{ steps.nix-cache.outputs.cache-hit == 'true' }} - run: nix-store --import < /tmp/nix-cache - - - name: Builds the project - run: nix build - - - name: Exports Nix store cache - if: ${{ steps.nix-cache.outputs.cache-hit != 'true' }} - run: nix-store --export $(find /nix/store -maxdepth 1 -name '*-*') > /tmp/nix-cache diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000..3004c9c --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,150 @@ +name: release + +on: + push: + tags: + - v* + +jobs: + create_release: + runs-on: ubuntu-latest + outputs: + upload_url: ${{ steps.create_release.outputs.upload_url }} + steps: + - name: Create release + id: create_release + uses: actions/create-release@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + tag_name: ${{ github.ref }} + release_name: ${{ github.ref }} + draft: false + prerelease: false + + deploy_github: + runs-on: ${{ matrix.os }} + needs: create_release + strategy: + fail-fast: false + matrix: + include: + - target: linux + os: ubuntu-latest + - target: macos + os: macos-latest + - target: musl + os: ubuntu-latest + # TODO: put back when nix package .#windows is fixed + # - target: windows + # os: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v2 + - name: Install Nix + uses: cachix/install-nix-action@v20 + with: + nix_path: nixpkgs=channel:nixos-unstable + extra_nix_config: | + experimental-features = nix-command flakes + - uses: cachix/cachix-action@v12 + with: + name: soywod + authToken: '${{ secrets.CACHIX_AUTH_TOKEN }}' + - name: Build release + run: nix build .#${{ matrix.target }} + - name: Compress executable + run: | + mkdir -p {man,completions} + cp result/bin/himalaya* . + nix run .#${{ matrix.target }} man ./man + nix run .#${{ matrix.target }} completion bash > ./completions/himalaya.bash + nix run .#${{ matrix.target }} completion elvish > ./completions/himalaya.elvish + nix run .#${{ matrix.target }} completion fish > ./completions/himalaya.fish + nix run .#${{ matrix.target }} completion powershell > ./completions/himalaya.powershell + nix run .#${{ matrix.target }} completion zsh > ./completions/himalaya.zsh + tar -czf himalaya.tar.gz himalaya* man completions + zip -r himalaya.zip himalaya* man completions + - name: Upload tar.gz release asset + uses: actions/upload-release-asset@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + upload_url: ${{ needs.create_release.outputs.upload_url }} + asset_path: himalaya.tar.gz + asset_name: himalaya-${{ matrix.target }}.tar.gz + asset_content_type: application/gzip + - name: Upload zip release asset + uses: actions/upload-release-asset@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + upload_url: ${{ needs.create_release.outputs.upload_url }} + asset_path: himalaya.zip + asset_name: himalaya-${{ matrix.target }}.zip + asset_content_type: application/zip + + # TODO: remove me when nix package .#windows is fixed + deploy_windows_github: + runs-on: windows-latest + needs: create_release + steps: + - name: Checkout code + uses: actions/checkout@v2 + - name: Install rust + uses: actions-rs/toolchain@v1 + with: + command: check + - name: Builds release + uses: actions-rs/cargo@v1 + with: + command: build + args: --release + - name: Compress executable + run: | + mkdir man + mkdir completions + copy target/release/himalaya.exe . + ./himalaya.exe man ./man + ./himalaya.exe completion bash > ./completions/himalaya.bash + ./himalaya.exe completion elvish > ./completions/himalaya.elvish + ./himalaya.exe completion fish > ./completions/himalaya.fish + ./himalaya.exe completion powershell > ./completions/himalaya.powershell + ./himalaya.exe completion zsh > ./completions/himalaya.zsh + tar -czf himalaya.tar.gz himalaya.exe man completions + zip -r himalaya.zip himalaya.exe man completions + - name: Upload tar.gz release asset + uses: actions/upload-release-asset@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + upload_url: ${{ needs.create_release.outputs.upload_url }} + asset_path: himalaya.tar.gz + asset_name: himalaya-windows.tar.gz + asset_content_type: application/gzip + - name: Upload zip release asset + uses: actions/upload-release-asset@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + upload_url: ${{ needs.create_release.outputs.upload_url }} + asset_path: himalaya.zip + asset_name: himalaya-windows.zip + asset_content_type: application/zip + + deploy_crates: + runs-on: ubuntu-latest + needs: create_release + steps: + - name: Checkout code + uses: actions/checkout@v2 + - name: Install Nix + uses: cachix/install-nix-action@v20 + with: + nix_path: nixpkgs=channel:nixos-unstable + extra_nix_config: | + experimental-features = nix-command flakes + - name: Publish library to crates.io + env: + CARGO_REGISTRY_TOKEN: ${{ secrets.CARGO_REGISTRY_TOKEN }} + run: nix develop -c cargo publish --no-verify --token ${CARGO_REGISTRY_TOKEN} diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index f315921..d346b05 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -3,36 +3,22 @@ name: tests on: pull_request: push: - branches: - - master jobs: tests: runs-on: ubuntu-latest steps: - - name: Install libnotmuch - run: sudo apt-get install -y libnotmuch-dev - name: Checkout code - uses: actions/checkout@v2 - - name: Start GreenMail testing server - run: | - docker run \ - --rm \ - -d \ - -e GREENMAIL_OPTS='-Dgreenmail.setup.test.all -Dgreenmail.hostname=0.0.0.0 -Dgreenmail.auth.disabled -Dgreenmail.verbose' \ - -p 3025:3025 \ - -p 3110:3110 \ - -p 3143:3143 \ - -p 3465:3465 \ - -p 3993:3993 \ - -p 3995:3995 \ - greenmail/standalone:1.6.11 - - name: Install rust - uses: actions-rs/toolchain@v1 + uses: actions/checkout@v2 + - name: Install Nix + uses: cachix/install-nix-action@v20 with: - toolchain: stable - - name: Run tests - uses: actions-rs/cargo@v1 + nix_path: nixpkgs=channel:nixos-unstable + extra_nix_config: | + experimental-features = nix-command flakes + - uses: cachix/cachix-action@v12 with: - command: test - args: --all-features + name: soywod + authToken: '${{ secrets.CACHIX_AUTH_TOKEN }}' + - name: Test + run: nix run .#test diff --git a/CHANGELOG.md b/CHANGELOG.md index 1349cb5..48147cb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +## [0.7.2] - 2023-05-01 + ### Added - Added `create` and `delete` folder commands [sourcehut#54]. @@ -546,7 +548,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Password from command [#22] - Set up README [#20] -[Unreleased]: https://github.com/soywod/himalaya/compare/v0.7.1...develop +[Unreleased]: https://github.com/soywod/himalaya/compare/v0.7.2...develop +[0.7.2]: https://github.com/soywod/himalaya/compare/v0.7.1...v0.7.2 [0.7.1]: https://github.com/soywod/himalaya/compare/v0.7.0...v0.7.1 [0.7.0]: https://github.com/soywod/himalaya/compare/v0.6.1...v0.7.0 [0.6.1]: https://github.com/soywod/himalaya/compare/v0.6.0...v0.6.1 diff --git a/Cargo.lock b/Cargo.lock index bc7deeb..4b40a4a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -106,6 +106,12 @@ version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" +[[package]] +name = "bitflags" +version = "2.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24a6904aef64d73cf10ab17ebace7befb918b82164785cb89907993be7f83813" + [[package]] name = "bufstream" version = "0.1.4" @@ -186,7 +192,7 @@ version = "4.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f13b9c79b5d1dd500d20ef541215a6423c75829ef43117e1b4d17fd8af0b5d76" dependencies = [ - "bitflags", + "bitflags 1.3.2", "clap_lex", "is-terminal", "strsim 0.10.0", @@ -227,7 +233,7 @@ version = "0.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ddfc5b9aa5d4507acaf872de71051dfd0e309860e88966e1051e462a077aac4f" dependencies = [ - "bitflags", + "bitflags 1.3.2", ] [[package]] @@ -771,7 +777,7 @@ dependencies = [ [[package]] name = "himalaya" -version = "0.7.1" +version = "0.7.2" dependencies = [ "anyhow", "atty", @@ -1023,9 +1029,9 @@ checksum = "fc7fcc620a3bff7cdd7a365be3376c97191aeaccc2a603e600951e452615bf89" [[package]] name = "libsqlite3-sys" -version = "0.25.2" +version = "0.26.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29f835d03d717946d28b1d1ed632eb6f0e24a299388ee623d0c23118d3e8a7fa" +checksum = "afc22eff61b133b115c6e8c74e818c628d6d5e7a502afea6f64dee076dd94326" dependencies = [ "cc", "pkg-config", @@ -1327,7 +1333,7 @@ version = "0.10.43" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "020433887e44c27ff16365eaa2d380547a94544ad509aff6eb5b6e3e0b27b376" dependencies = [ - "bitflags", + "bitflags 1.3.2", "cfg-if 1.0.0", "foreign-types", "libc", @@ -1508,9 +1514,9 @@ dependencies = [ [[package]] name = "pimalaya-email" -version = "0.6.0" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15171f3839bb7b7938f78b0c43902247d7f1e80befccd63f6cab93ac55613405" +checksum = "bab7e9b0747644aecff24024c88348146bd74bba78fa5ecca10e7e5938d6873a" dependencies = [ "ammonia", "chrono", @@ -1741,7 +1747,7 @@ version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" dependencies = [ - "bitflags", + "bitflags 1.3.2", ] [[package]] @@ -1818,11 +1824,11 @@ checksum = "b833d8d034ea094b1ea68aa6d5c740e0d04bad9d16568d08ba6f76823a114316" [[package]] name = "rusqlite" -version = "0.28.0" +version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01e213bc3ecb39ac32e81e51ebe31fd888a940515173e3a18a35f8c6e896422a" +checksum = "549b9d036d571d42e6e85d1c1425e2ac83491075078ca9a15be021c56b1641f2" dependencies = [ - "bitflags", + "bitflags 2.2.1", "fallible-iterator", "fallible-streaming-iterator", "hashlink", @@ -1836,7 +1842,7 @@ version = "0.36.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a3807b5d10909833d3e9acd1eb5fb988f79376ff10fce42937de71a449c4c588" dependencies = [ - "bitflags", + "bitflags 1.3.2", "errno", "io-lifetimes", "libc", @@ -1933,7 +1939,7 @@ version = "2.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2bc1bb97804af6631813c55739f771071e0f2ed33ee20b68c86ec505d906356c" dependencies = [ - "bitflags", + "bitflags 1.3.2", "core-foundation", "core-foundation-sys", "libc", diff --git a/Cargo.toml b/Cargo.toml index edccaae..6f5197e 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "himalaya" description = "CLI to manage your emails." -version = "0.7.1" +version = "0.7.2" authors = ["soywod "] edition = "2021" license = "MIT" @@ -15,7 +15,15 @@ repository = "https://github.com/soywod/himalaya" all-features = true [features] -default = ["imap-backend", "smtp-sender", "native-tls"] +default = ["rustls-tls", "rustls-native-certs", "imap-backend", "smtp-sender"] + +# rustls +rustls-tls = ["pimalaya-email/rustls-tls"] +rustls-native-certs = ["pimalaya-email/rustls-native-certs"] + +# native tls +native-tls = ["pimalaya-email/native-tls"] +native-tls-vendored = ["pimalaya-email/native-tls-vendored"] # backends imap-backend = ["pimalaya-email/imap-backend"] @@ -24,14 +32,6 @@ notmuch-backend = ["pimalaya-email/notmuch-backend"] # senders smtp-sender = ["pimalaya-email/smtp-sender"] -# native tls -native-tls = ["pimalaya-email/native-tls"] -native-tls-vendored = ["pimalaya-email/native-tls-vendored"] - -# rustls -rustls-tls = ["pimalaya-email/rustls-tls"] -rustls-native-certs = ["pimalaya-email/rustls-native-certs"] - [dev-dependencies] tempfile = "3.3" @@ -48,7 +48,7 @@ dialoguer = "0.10.2" email_address = "0.2.4" env_logger = "0.8" erased-serde = "0.3" -pimalaya-email = "0.6.0" +pimalaya-email = "0.7.1" indicatif = "0.17" log = "0.4" once_cell = "1.16.0" diff --git a/flake.lock b/flake.lock index 95c6151..a344611 100644 --- a/flake.lock +++ b/flake.lock @@ -1,28 +1,36 @@ { "nodes": { - "flake-compat": { - "flake": false, + "fenix": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ], + "rust-analyzer-src": "rust-analyzer-src" + }, "locked": { - "lastModified": 1673956053, - "narHash": "sha256-4gtG9iQuiKITOjNQQeQIpoIB6b16fm+504Ch3sNKLd8=", - "owner": "edolstra", - "repo": "flake-compat", - "rev": "35bb57c0c8d8b62bbfd284272c928ceb64ddbde9", + "lastModified": 1682835640, + "narHash": "sha256-rAYEOd4nZFLjDlrF9KNlcopPKNVtr1svSXcEValVRMY=", + "owner": "nix-community", + "repo": "fenix", + "rev": "006b429d3c493f4c5b1743a94f71ad961c7693ab", "type": "github" }, "original": { - "owner": "edolstra", - "repo": "flake-compat", + "owner": "nix-community", + "repo": "fenix", "type": "github" } }, "flake-utils": { + "inputs": { + "systems": "systems" + }, "locked": { - "lastModified": 1659877975, - "narHash": "sha256-zllb8aq3YO3h8B/U0/J1WBgAL8EX5yWf5pMj3G0NAmc=", + "lastModified": 1681202837, + "narHash": "sha256-H+Rh19JDwRtpVPAWp64F+rlEtxUWBAQW28eAi3SRSzg=", "owner": "numtide", "repo": "flake-utils", - "rev": "c0e246b9b83f637f4681389ecabcb2681b4f3af0", + "rev": "cfacdce06f30d2b68473a46042957675eebb3401", "type": "github" }, "original": { @@ -31,16 +39,38 @@ "type": "github" } }, + "gitignore": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1660459072, + "narHash": "sha256-8DFJjXG8zqoONA1vXtgeKXy68KdJL5UaXR8NtVMUbx8=", + "owner": "hercules-ci", + "repo": "gitignore.nix", + "rev": "a20de23b925fd8264fd7fad6454652e142fd7f73", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "gitignore.nix", + "type": "github" + } + }, "naersk": { "inputs": { - "nixpkgs": "nixpkgs" + "nixpkgs": [ + "nixpkgs" + ] }, "locked": { - "lastModified": 1671096816, - "narHash": "sha256-ezQCsNgmpUHdZANDCILm3RvtO1xH8uujk/+EqNvzIOg=", + "lastModified": 1679567394, + "narHash": "sha256-ZvLuzPeARDLiQUt6zSZFGOs+HZmE+3g4QURc8mkBsfM=", "owner": "nix-community", "repo": "naersk", - "rev": "d998160d6a076cfe8f9741e56aeec7e267e3e114", + "rev": "88cd22380154a2c36799fe8098888f0f59861a15", "type": "github" }, "original": { @@ -51,88 +81,58 @@ }, "nixpkgs": { "locked": { - "lastModified": 1675698036, - "narHash": "sha256-BgsQkQewdlQi8gapJN4phpxkI/FCE/2sORBaFcYbp/A=", - "owner": "NixOS", + "lastModified": 1682669017, + "narHash": "sha256-Vi+p4y3wnl0/4gcwTdmCO398kKlDaUrNROtf3GOD2NY=", + "owner": "nixos", "repo": "nixpkgs", - "rev": "1046c7b92e908a1202c0f1ba3fc21d19e1cf1b62", + "rev": "7449971a3ecf857b4a554cf79b1d9dcc1a4647d8", "type": "github" }, "original": { - "id": "nixpkgs", - "type": "indirect" - } - }, - "nixpkgs_2": { - "locked": { - "lastModified": 1664356419, - "narHash": "sha256-PD0hM9YWp2lepAJk7edh8g1VtzJip5rals1fpoQUlY0=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "46e8398474ac3b1b7bb198bf9097fc213bbf59b1", - "type": "github" - }, - "original": { - "id": "nixpkgs", - "type": "indirect" - } - }, - "nixpkgs_3": { - "locked": { - "lastModified": 1665296151, - "narHash": "sha256-uOB0oxqxN9K7XGF1hcnY+PQnlQJ+3bP2vCn/+Ru/bbc=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "14ccaaedd95a488dd7ae142757884d8e125b3363", - "type": "github" - }, - "original": { - "owner": "NixOS", - "ref": "nixpkgs-unstable", + "owner": "nixos", + "ref": "nixos-22.11", "repo": "nixpkgs", "type": "github" } }, "root": { "inputs": { - "flake-compat": "flake-compat", - "naersk": "naersk", - "nixpkgs": "nixpkgs_2", - "rust-overlay": "rust-overlay", - "utils": "utils" - } - }, - "rust-overlay": { - "inputs": { + "fenix": "fenix", "flake-utils": "flake-utils", - "nixpkgs": "nixpkgs_3" - }, + "gitignore": "gitignore", + "naersk": "naersk", + "nixpkgs": "nixpkgs" + } + }, + "rust-analyzer-src": { + "flake": false, "locked": { - "lastModified": 1675823425, - "narHash": "sha256-o/uLXQdq3OrRAv4BZVVY0VmhMmQBLWw6Y4o+p6ZiaR4=", - "owner": "oxalica", - "repo": "rust-overlay", - "rev": "02e1abbdcbc2d516193ff8a7add71f44cd976ba0", + "lastModified": 1682792082, + "narHash": "sha256-1nuP2rqipsdB8IJ3N5ws3FQm4dX3mKIueIrCUSu1bWw=", + "owner": "rust-lang", + "repo": "rust-analyzer", + "rev": "7bcb4c2ef23e151a639ff918fbb8ab9d521eabb9", "type": "github" }, "original": { - "owner": "oxalica", - "repo": "rust-overlay", + "owner": "rust-lang", + "ref": "nightly", + "repo": "rust-analyzer", "type": "github" } }, - "utils": { + "systems": { "locked": { - "lastModified": 1667395993, - "narHash": "sha256-nuEHfE/LcWyuSWnS8t12N1wc105Qtau+/OdUAjtQ0rA=", - "owner": "numtide", - "repo": "flake-utils", - "rev": "5aed5285a952e0b949eb3ba02c12fa4fcfef535f", + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", "type": "github" }, "original": { - "owner": "numtide", - "repo": "flake-utils", + "owner": "nix-systems", + "repo": "default", "type": "github" } } diff --git a/flake.nix b/flake.nix index b8baf74..34bc322 100644 --- a/flake.nix +++ b/flake.nix @@ -1,65 +1,140 @@ { - description = "Command-line interface for email management."; + description = "CLI to manage your emails."; inputs = { - utils.url = "github:numtide/flake-utils"; - rust-overlay.url = "github:oxalica/rust-overlay"; - naersk.url = "github:nix-community/naersk"; - flake-compat = { - url = "github:edolstra/flake-compat"; - flake = false; + nixpkgs.url = "github:nixos/nixpkgs/nixos-22.11"; + flake-utils.url = "github:numtide/flake-utils"; + gitignore = { + url = "github:hercules-ci/gitignore.nix"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + fenix = { + url = "github:nix-community/fenix"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + naersk = { + url = "github:nix-community/naersk"; + inputs.nixpkgs.follows = "nixpkgs"; }; }; - outputs = { self, nixpkgs, utils, rust-overlay, naersk, ... }: - utils.lib.eachDefaultSystem - (system: + outputs = { self, nixpkgs, flake-utils, gitignore, fenix, naersk }: + let + inherit (gitignore.lib) gitignoreSource; + + mkToolchain = buildPlatform: + fenix.packages.${buildPlatform}.minimal.toolchain; + + mkToolchainWithTarget = buildPlatform: targetPlatform: + with fenix.packages.${buildPlatform}; combine [ + stable.rustc + stable.cargo + targets.${targetPlatform}.stable.rust-std + ]; + + mkDevShells = buildPlatform: let - name = "himalaya"; - overlays = [ (import rust-overlay) ]; - pkgs = import nixpkgs { inherit system overlays; }; + pkgs = import nixpkgs { system = buildPlatform; }; + rust-toolchain = fenix.packages.${buildPlatform}.fromToolchainFile { + file = ./rust-toolchain.toml; + sha256 = "eMJethw5ZLrJHmoN2/l0bIyQjoTX1NsvalWSscTixpI="; + }; in - rec { - # nix build - defaultPackage = packages.${name}; - packages = { - ${name} = naersk.lib.${system}.buildPackage { - pname = name; - root = ./.; - nativeBuildInputs = with pkgs; [ openssl.dev pkg-config ]; - overrideMain = _: { - postInstall = '' - mkdir -p $out/share/applications/ - cp assets/himalaya.desktop $out/share/applications/ - ''; - }; - }; - }; - - # nix run - defaultApp = apps.${name}; - apps.${name} = utils.lib.mkApp { - inherit name; - drv = packages.${name}; - }; - - # nix develop - devShell = pkgs.mkShell { - inputsFrom = builtins.attrValues self.packages.${system}; - nativeBuildInputs = with pkgs; [ - # Nix LSP + formatter + { + default = pkgs.mkShell { + buildInputs = with pkgs; [ + # Nix env rnix-lsp nixpkgs-fmt # Rust env - (rust-bin.fromRustupToolchainFile ./rust-toolchain.toml) - cargo-watch - rust-analyzer + rust-toolchain - # Notmuch + # notmuch notmuch ]; }; - } - ); + }; + + mkPackage = pkgs: buildPlatform: targetPlatform: package: + let + toolchain = + if isNull targetPlatform + then mkToolchain buildPlatform + else mkToolchainWithTarget buildPlatform targetPlatform; + naersk' = naersk.lib.${buildPlatform}.override { + cargo = toolchain; + rustc = toolchain; + }; + package' = { + name = "himalaya"; + src = gitignoreSource ./.; + overrideMain = _: { + postInstall = '' + mkdir -p $out/share/applications/ + cp assets/himalaya.desktop $out/share/applications/ + ''; + }; + } // pkgs.lib.optionalAttrs (!isNull targetPlatform) { + CARGO_BUILD_TARGET = targetPlatform; + } // package; + in + naersk'.buildPackage package'; + + mkPackages = buildPlatform: + let + pkgs = import nixpkgs { system = buildPlatform; }; + mkPackageWithTarget = mkPackage pkgs buildPlatform; + defaultPackage = mkPackage pkgs buildPlatform null { }; + in + { + default = defaultPackage; + linux = defaultPackage; + macos = defaultPackage; + musl = mkPackageWithTarget "x86_64-unknown-linux-musl" (with pkgs.pkgsStatic; { + CARGO_BUILD_RUSTFLAGS = "-C target-feature=+crt-static"; + SQLITE3_STATIC = 1; + SQLITE3_LIB_DIR = "${sqlite.out}/lib"; + hardeningDisable = [ "all" ]; + }); + # FIXME: package does not build, assembler messages: unknown + # pseudo-op… + windows = mkPackageWithTarget "x86_64-pc-windows-gnu" { + strictDeps = true; + depsBuildBuild = with pkgs.pkgsCross.mingwW64; [ + stdenv.cc + windows.pthreads + ]; + }; + }; + + mkApp = drv: flake-utils.lib.mkApp { + inherit drv; + name = "himalaya"; + }; + + mkApps = buildPlatform: { + default = mkApp self.packages.${buildPlatform}.default; + linux = mkApp self.packages.${buildPlatform}.linux; + macos = mkApp self.packages.${buildPlatform}.macos; + musl = mkApp self.packages.${buildPlatform}.musl; + windows = + let + pkgs = import nixpkgs { system = buildPlatform; }; + wine = pkgs.wine.override { wineBuild = "wine64"; }; + himalaya = self.packages.${buildPlatform}.windows; + app = pkgs.writeShellScriptBin "himalaya" '' + export WINEPREFIX="$(mktemp -d)" + ${wine}/bin/wine64 ${himalaya}/bin/himalaya.exe $@ + ''; + in + mkApp app; + }; + + in + flake-utils.lib.eachDefaultSystem (system: { + devShells = mkDevShells system; + packages = mkPackages system; + apps = mkApps system; + }); } diff --git a/rust-toolchain.toml b/rust-toolchain.toml index 292fe49..aff8cc2 100644 --- a/rust-toolchain.toml +++ b/rust-toolchain.toml @@ -1,2 +1,11 @@ [toolchain] channel = "stable" +profile = "default" +components = [ + "cargo", + "clippy", + "rust-analyzer", + "rust-std", + "rustc", + "rustfmt", +]