release v1.0.0-beta.4

This commit is contained in:
Clément DOUIN 2024-04-16 21:26:00 +02:00
parent 23ae40e728
commit 10de8e9fb4
No known key found for this signature in database
GPG key ID: 353E4A18EE0FAB72
10 changed files with 209 additions and 242 deletions

View file

@ -22,22 +22,21 @@ jobs:
draft: false draft: false
prerelease: false prerelease: false
deploy-unix-releases: deploy-releases:
runs-on: ${{ matrix.os }} runs-on: ${{ matrix.os }}
needs: create-release needs: create-release
strategy: strategy:
fail-fast: false fail-fast: false
matrix: matrix:
include: include:
- target: linux - target: x86_64-linux
os: ubuntu-latest os: ubuntu-latest
- target: linux-musl - target: arm64-linux
os: ubuntu-latest os: ubuntu-latest
- target: macos - target: x86_64-windows
os: ubuntu-latest
- target: x86_64-macos
os: macos-latest os: macos-latest
# TODO: uncomment once nix build .#windows works
# - target: windows
# os: ubuntu-latest
steps: steps:
- name: Checkout code - name: Checkout code
uses: actions/checkout@v2 uses: actions/checkout@v2
@ -51,34 +50,18 @@ jobs:
with: with:
name: soywod name: soywod
authToken: '${{ secrets.CACHIX_AUTH_TOKEN }}' authToken: '${{ secrets.CACHIX_AUTH_TOKEN }}'
- name: Build release - name: Build release archive
run: nix build -L .#${{ matrix.target }}
- name: Copy binary
run: | run: |
nix build -L .#${{ matrix.target }}
cp result/bin/himalaya* . cp result/bin/himalaya* .
- name: Patch binary interpreter - name: Upload tgz release archive
if: ${{ matrix.target == 'linux' }}
run: |
nix-shell -p patchelf --command "sudo patchelf --set-interpreter /lib64/ld-linux-x86-64.so.2 himalaya"
- name: Prepare release archives
run: |
mkdir -p {man,completions}
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.tgz himalaya* man completions
zip -r himalaya.zip himalaya* man completions
- name: Upload tarball release archive
uses: actions/upload-release-asset@v1 uses: actions/upload-release-asset@v1
env: env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with: with:
upload_url: ${{ needs.create-release.outputs.upload_url }} upload_url: ${{ needs.create-release.outputs.upload_url }}
asset_path: himalaya.tgz asset_path: himalaya.tgz
asset_name: himalaya-${{ matrix.target }}.tgz asset_name: himalaya.${{ matrix.target }}.tgz
asset_content_type: application/gzip asset_content_type: application/gzip
- name: Upload zip release archive - name: Upload zip release archive
uses: actions/upload-release-asset@v1 uses: actions/upload-release-asset@v1
@ -87,74 +70,5 @@ jobs:
with: with:
upload_url: ${{ needs.create-release.outputs.upload_url }} upload_url: ${{ needs.create-release.outputs.upload_url }}
asset_path: himalaya.zip asset_path: himalaya.zip
asset_name: himalaya-${{ matrix.target }}.zip asset_name: himalaya.${{ matrix.target }}.zip
asset_content_type: application/zip asset_content_type: application/zip
# TODO: remove me once nix build .#windows works
deploy-windows-release:
runs-on: windows-latest
needs: create-release
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Install rust
uses: actions-rs/toolchain@v1
with:
toolchain: stable
profile: minimal
- name: Build release
uses: actions-rs/cargo@v1
with:
command: build
args: --release
- name: Copy binary
run: |
copy target/release/himalaya.exe .
- name: Prepare release archives
run: |
mkdir man
mkdir completions
./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.tgz himalaya.exe man completions
Compress-Archive -Path himalaya.exe,man,completions -DestinationPath himalaya.zip
- name: Upload tarball release archive
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ needs.create-release.outputs.upload_url }}
asset_path: himalaya.tgz
asset_name: himalaya-windows.tgz
asset_content_type: application/gzip
- name: Upload zip release archive
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
publish-crates-io:
runs-on: ubuntu-latest
needs: create-release
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Install Nix
uses: cachix/install-nix-action@v24
with:
nix_path: nixpkgs=channel:nixos-23.11
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}

View file

@ -1,24 +0,0 @@
name: tests
on:
pull_request:
push:
jobs:
tests:
runs-on: 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-23.11
extra_nix_config: |
experimental-features = nix-command flakes
- uses: cachix/cachix-action@v12
with:
name: soywod
authToken: '${{ secrets.CACHIX_AUTH_TOKEN }}'
- name: Build then test
run: nix build

View file

@ -7,6 +7,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
## [Unreleased] ## [Unreleased]
## [1.0.0-beta.4] - 2024-04-16
### Added ### Added
- Added systemd service in `assets/` folder. - Added systemd service in `assets/` folder.
@ -32,6 +34,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- Fixed watch IMAP envelopes when folder was empty [#179]. - Fixed watch IMAP envelopes when folder was empty [#179].
- Prevented parsing of undefined config options [#188]. - Prevented parsing of undefined config options [#188].
- Fixed `In-Reply-To` header being skipped from mailto URLs [#194]. - Fixed `In-Reply-To` header being skipped from mailto URLs [#194].
- Fixed error page out of bounds when filtering envelopes returned an empty result [#195].
## [1.0.0-beta.3] - 2024-02-25 ## [1.0.0-beta.3] - 2024-02-25
@ -821,3 +824,4 @@ Few major concepts changed:
[#184]: https://todo.sr.ht/~soywod/pimalaya/184 [#184]: https://todo.sr.ht/~soywod/pimalaya/184
[#188]: https://todo.sr.ht/~soywod/pimalaya/188 [#188]: https://todo.sr.ht/~soywod/pimalaya/188
[#194]: https://todo.sr.ht/~soywod/pimalaya/194 [#194]: https://todo.sr.ht/~soywod/pimalaya/194
[#195]: https://todo.sr.ht/~soywod/pimalaya/195

8
Cargo.lock generated
View file

@ -1218,9 +1218,9 @@ dependencies = [
[[package]] [[package]]
name = "email-lib" name = "email-lib"
version = "0.24.0" version = "0.24.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "28526bad9d46fcfb2c6385961aeb4b684546c965d18a12e5552ca4af7cf1f35e" checksum = "20eca48c1ae74c6c7ec6ef9a6c2af935e3cc601c50fce1385c24bec5dd5e20e9"
dependencies = [ dependencies = [
"advisory-lock", "advisory-lock",
"async-trait", "async-trait",
@ -3948,9 +3948,9 @@ dependencies = [
[[package]] [[package]]
name = "serde_json" name = "serde_json"
version = "1.0.115" version = "1.0.116"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "12dc5c46daa8e9fdf4f5e71b6cf9a53f2487da0e86e55808e2d35539666497dd" checksum = "3e17db7126d17feb94eb3fad46bf1a96b034e8aacbc2e775fe81505f8b0b2813"
dependencies = [ dependencies = [
"itoa", "itoa",
"ryu", "ryu",

View file

@ -45,7 +45,6 @@ pgp-commands = ["email-lib/pgp-commands", "mml-lib/pgp-commands", "pgp"]
pgp-gpg = ["email-lib/pgp-gpg", "mml-lib/pgp-gpg", "pgp"] pgp-gpg = ["email-lib/pgp-gpg", "mml-lib/pgp-gpg", "pgp"]
pgp-native = ["email-lib/pgp-native", "mml-lib/pgp-native", "pgp"] pgp-native = ["email-lib/pgp-native", "mml-lib/pgp-native", "pgp"]
[dependencies] [dependencies]
ariadne = "0.2" ariadne = "0.2"
async-trait = "0.1" async-trait = "0.1"
@ -56,7 +55,7 @@ color-eyre = "0.6.3"
console = "0.15.2" console = "0.15.2"
dialoguer = "0.10.2" dialoguer = "0.10.2"
dirs = "4" dirs = "4"
email-lib = { version = "=0.24.0", default-features = false, features = ["derive"] } email-lib = { version = "=0.24.1", default-features = false, features = ["derive"] }
email_address = "0.2.4" email_address = "0.2.4"
erased-serde = "0.3" erased-serde = "0.3"
indicatif = "0.17" indicatif = "0.17"

View file

@ -8,15 +8,15 @@
"rust-analyzer-src": "rust-analyzer-src" "rust-analyzer-src": "rust-analyzer-src"
}, },
"locked": { "locked": {
"lastModified": 1708842026, "lastModified": 1713081044,
"narHash": "sha256-1r+7l66CFPCjRDZEKq6r7aCpfjqhIkrF3ZTQyEFnkTs=", "narHash": "sha256-ZwbJDrizU+nzU7wTgokYuu5yK71wLPmOLukiunm5B6Y=",
"owner": "nix-community", "owner": "soywod",
"repo": "fenix", "repo": "fenix",
"rev": "b7fff64b5bc36b1662f8317632b11b15b3839b2a", "rev": "af99e7e9c87389c0a5aaf953478664d7126c2b14",
"type": "github" "type": "github"
}, },
"original": { "original": {
"owner": "nix-community", "owner": "soywod",
"repo": "fenix", "repo": "fenix",
"type": "github" "type": "github"
} }
@ -44,11 +44,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1703887061, "lastModified": 1709087332,
"narHash": "sha256-gGPa9qWNc6eCXT/+Z5/zMkyYOuRZqeFZBDbopNZQkuY=", "narHash": "sha256-HG2cCnktfHsKV0s4XW83gU3F57gaTljL9KNSuG6bnQs=",
"owner": "hercules-ci", "owner": "hercules-ci",
"repo": "gitignore.nix", "repo": "gitignore.nix",
"rev": "43e1aa1308018f37118e34d3a9cb4f5e75dc11d5", "rev": "637db329424fd7e46cf4185293b9cc8c88c95394",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -79,11 +79,11 @@
}, },
"nixpkgs": { "nixpkgs": {
"locked": { "locked": {
"lastModified": 1708702655, "lastModified": 1713145326,
"narHash": "sha256-qxT5jSLhelfLhQ07+AUxSTm1VnVH+hQxDkQSZ/m/Smo=", "narHash": "sha256-m7+IWM6mkWOg22EC5kRUFCycXsXLSU7hWmHdmBfmC3s=",
"owner": "nixos", "owner": "nixos",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "c5101e457206dd437330d283d6626944e28794b3", "rev": "53a2c32bc66f5ae41a28d7a9a49d321172af621e",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -105,11 +105,11 @@
"rust-analyzer-src": { "rust-analyzer-src": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1708768292, "lastModified": 1712818880,
"narHash": "sha256-IBHMNEe3lspVdIzjpM2OVZiBFmFw1DKtdgVN5G41pRc=", "narHash": "sha256-VDxsvgj/bNypHq48tQWtc3VRbWvzlFjzKf9ZZIVO10Y=",
"owner": "rust-lang", "owner": "rust-lang",
"repo": "rust-analyzer", "repo": "rust-analyzer",
"rev": "4a8d0f7f565b6df45da5522dd7366a4df3460cd7", "rev": "657b33b0cb9bd49085202e91ad5b4676532c9140",
"type": "github" "type": "github"
}, },
"original": { "original": {

207
flake.nix
View file

@ -8,7 +8,7 @@
inputs.nixpkgs.follows = "nixpkgs"; inputs.nixpkgs.follows = "nixpkgs";
}; };
fenix = { fenix = {
url = "github:nix-community/fenix"; url = "github:soywod/fenix";
inputs.nixpkgs.follows = "nixpkgs"; inputs.nixpkgs.follows = "nixpkgs";
}; };
naersk = { naersk = {
@ -25,8 +25,114 @@
let let
inherit (gitignore.lib) gitignoreSource; inherit (gitignore.lib) gitignoreSource;
staticRustFlags = [ "-Ctarget-feature=+crt-static" ];
# Map of map matching supported Nix build systems with Rust
# cross target systems.
crossBuildTargets = {
x86_64-linux = {
x86_64-linux = {
rustTarget = "x86_64-unknown-linux-musl";
override = { ... }: { };
};
arm64-linux = rec {
rustTarget = "aarch64-unknown-linux-musl";
override = { system, pkgs }:
let
inherit (mkPkgsCross system rustTarget) stdenv;
cc = "${stdenv.cc}/bin/${stdenv.cc.targetPrefix}cc"; in
rec {
TARGET_CC = cc;
CARGO_BUILD_RUSTFLAGS = staticRustFlags ++ [ "-Clinker=${cc}" ];
postInstall = mkPostInstall {
inherit pkgs;
bin = "${pkgs.qemu}/bin/qemu-aarch64 ./himalaya";
};
};
};
x86_64-windows = {
rustTarget = "x86_64-pc-windows-gnu";
override = { system, pkgs }:
let
inherit (pkgs) pkgsCross zip;
inherit (pkgsCross.mingwW64) stdenv windows;
cc = "${stdenv.cc}/bin/${stdenv.cc.targetPrefix}cc";
wine = pkgs.wine.override { wineBuild = "wine64"; };
postInstall = mkPostInstall {
inherit pkgs;
bin = "${wine}/bin/wine64 ./himalaya.exe";
};
in
{
depsBuildBuild = [ stdenv.cc windows.pthreads ];
TARGET_CC = cc;
CARGO_BUILD_RUSTFLAGS = staticRustFlags ++ [ "-Clinker=${cc}" ];
postInstall = ''
export WINEPREFIX="$(mktemp -d)"
${postInstall}
'';
};
};
};
x86_64-darwin = {
x86_64-macos = {
rustTarget = "x86_64-apple-darwin";
override = { pkgs, ... }:
let inherit (pkgs.darwin.apple_sdk.frameworks) AppKit Cocoa; in
{
buildInputs = [ Cocoa ];
NIX_LDFLAGS = "-F${AppKit}/Library/Frameworks -framework AppKit";
};
};
# FIXME: infinite recursion in stdenv?!
arm64-macos = {
rustTarget = "aarch64-apple-darwin";
override = { system, pkgs }:
let
# inherit (mkPkgsCross system "aarch64-darwin") stdenv;
inherit ((mkPkgsCross system "aarch64-darwin").pkgsStatic) stdenv darwin;
inherit (darwin.apple_sdk.frameworks) AppKit Cocoa;
cc = "${stdenv.cc}/bin/${stdenv.cc.targetPrefix}cc";
in
rec {
buildInputs = [ Cocoa ];
NIX_LDFLAGS = "-F${AppKit}/Library/Frameworks -framework AppKit -F${Cocoa}/Library/Frameworks -framework Cocoa";
NIX_CFLAGS_COMPILE = "-F${AppKit}/Library/Frameworks -framework AppKit -F${Cocoa}/Library/Frameworks -framework Cocoa";
TARGET_CC = cc;
CARGO_BUILD_RUSTFLAGS = staticRustFlags ++ [ "-Clinker=${cc}" "-lframework=${Cocoa}/Library/Frameworks" ];
postInstall = mkPostInstall {
inherit pkgs;
bin = "${pkgs.qemu}/bin/qemu-aarch64 ./himalaya";
};
};
};
};
};
mkToolchain = import ./rust-toolchain.nix fenix; mkToolchain = import ./rust-toolchain.nix fenix;
mkPkgsCross = buildSystem: crossSystem: import nixpkgs {
system = buildSystem;
crossSystem.config = crossSystem;
};
mkPostInstall = { pkgs, bin ? "./himalaya" }: with pkgs; ''
cd $out/bin
mkdir -p {man,completions}
${bin} man ./man
${bin} completion bash > ./completions/himalaya.bash
${bin} completion elvish > ./completions/himalaya.elvish
${bin} completion fish > ./completions/himalaya.fish
${bin} completion powershell > ./completions/himalaya.powershell
${bin} completion zsh > ./completions/himalaya.zsh
tar -czf himalaya.tgz himalaya* man completions
${zip}/bin/zip -r himalaya.zip himalaya* man completions
'';
mkDevShells = buildPlatform: mkDevShells = buildPlatform:
let let
pkgs = import nixpkgs { system = buildPlatform; }; pkgs = import nixpkgs { system = buildPlatform; };
@ -34,27 +140,21 @@
in in
{ {
default = pkgs.mkShell { default = pkgs.mkShell {
nativeBuildInputs = with pkgs; [ nativeBuildInputs = with pkgs; [ pkg-config ];
pkg-config
];
buildInputs = with pkgs; [ buildInputs = with pkgs; [
# Nix # Nix
rnix-lsp # rnix-lsp
nixpkgs-fmt nixpkgs-fmt
# Rust # Rust
rust-toolchain rust-toolchain
cargo-watch cargo-watch
# OpenSSL # Email env
openssl.dev
# Notmuch
notmuch
# GPG
gnupg gnupg
gpgme gpgme
msmtp
notmuch
]; ];
}; };
}; };
@ -71,53 +171,31 @@
package' = { package' = {
name = "himalaya"; name = "himalaya";
src = gitignoreSource ./.; src = gitignoreSource ./.;
overrideMain = _: { # overrideMain = _: {
postInstall = '' # postInstall = ''
mkdir -p $out/share/applications/ # mkdir -p $out/share/applications/
cp assets/himalaya.desktop $out/share/applications/ # cp assets/himalaya.desktop $out/share/applications/
''; # '';
}; # };
doCheck = true; doCheck = false;
cargoTestOptions = opts: opts ++ [ "--lib" ]; auditable = false;
} // pkgs.lib.optionalAttrs (!isNull targetPlatform) { strictDeps = true;
CARGO_BUILD_TARGET = targetPlatform; CARGO_BUILD_TARGET = targetPlatform;
CARGO_BUILD_RUSTFLAGS = staticRustFlags;
postInstall = mkPostInstall { inherit pkgs; };
} // package; } // package;
in in
naersk'.buildPackage package'; naersk'.buildPackage package';
mkPackages = buildPlatform: mkPackages = system:
let let
pkgs = import nixpkgs { system = buildPlatform; }; pkgs = import nixpkgs { inherit system; };
mkPackage' = mkPackage pkgs buildPlatform; mkPackage' = target: package: mkPackage pkgs system package.rustTarget (package.override { inherit system pkgs; });
in in
rec { builtins.mapAttrs mkPackage' crossBuildTargets.${system};
default = if pkgs.stdenv.isDarwin then macos else linux;
linux = mkPackage' null { };
linux-musl = mkPackage' "x86_64-unknown-linux-musl" (with pkgs.pkgsStatic; {
CARGO_BUILD_RUSTFLAGS = "-C target-feature=+crt-static";
hardeningDisable = [ "all" ];
});
macos = mkPackage' null (with pkgs.darwin.apple_sdk.frameworks; {
# NOTE: needed to prevent error Undefined symbols
# "_OBJC_CLASS_$_NSImage" and
# "_LSCopyApplicationURLsForBundleIdentifier"
NIX_LDFLAGS = "-F${AppKit}/Library/Frameworks -framework AppKit";
buildInputs = [ Cocoa ];
});
# FIXME: bzlip: fatal error: windows.h: No such file or directory
# May be related to SQLite.
windows = mkPackage' "x86_64-pc-windows-gnu" {
strictDeps = true;
depsBuildBuild = with pkgs.pkgsCross.mingwW64; [
stdenv.cc
windows.pthreads
];
};
};
mkApp = drv: mkApp = drv:
let exePath = drv.passthru.exePath or "/bin/himalaya"; let exePath = drv.passthru.exePath or "/bin/himalaya"; in
in
{ {
type = "app"; type = "app";
program = "${drv}${exePath}"; program = "${drv}${exePath}";
@ -126,29 +204,16 @@
mkApps = buildPlatform: mkApps = buildPlatform:
let let
pkgs = import nixpkgs { system = buildPlatform; }; pkgs = import nixpkgs { system = buildPlatform; };
mkApp' = target: package: mkApp self.packages.${buildPlatform}.${target};
in in
rec { builtins.mapAttrs mkApp' crossBuildTargets.${buildPlatform};
default = if pkgs.stdenv.isDarwin then macos else linux;
linux = mkApp self.packages.${buildPlatform}.linux; supportedSystems = builtins.attrNames crossBuildTargets;
linux-musl = mkApp self.packages.${buildPlatform}.linux-musl; mapSupportedSystem = nixpkgs.lib.genAttrs supportedSystems;
macos = mkApp self.packages.${buildPlatform}.macos;
windows =
let
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;
};
supportedSystems = [ "aarch64-linux" "aarch64-darwin" "x86_64-darwin" "x86_64-linux" ];
forEachSupportedSystem = f: nixpkgs.lib.genAttrs supportedSystems f;
in in
{ {
apps = forEachSupportedSystem mkApps; apps = mapSupportedSystem mkApps;
packages = forEachSupportedSystem mkPackages; packages = mapSupportedSystem mkPackages;
devShells = forEachSupportedSystem mkDevShells; devShells = mapSupportedSystem mkDevShells;
}; };
} }

View file

@ -11,32 +11,44 @@ DESTDIR="${DESTDIR:-}"
PREFIX="${PREFIX:-"$DESTDIR/usr/local"}" PREFIX="${PREFIX:-"$DESTDIR/usr/local"}"
RELEASES_URL="https://github.com/soywod/himalaya/releases" RELEASES_URL="https://github.com/soywod/himalaya/releases"
binary=himalaya
system=$(uname -s | tr [:upper:] [:lower:]) system=$(uname -s | tr [:upper:] [:lower:])
machine=$(uname -m | tr [:upper:] [:lower:])
case $system in case $system in
msys*|mingw*|cygwin*|win*) system=windows; binary=himalaya.exe;; msys*|mingw*|cygwin*|win*)
linux|freebsd) system=linux; binary=himalaya;; target=x86_64-windows
darwin) system=macos; binary=himalaya;; binary=himalaya.exe;;
*) die "Unsupported system: $system" ;;
linux|freebsd)
case $machine in
x86_64) target=x86_64-linux;;
arm64|aarch64) target=arm64-linux;;
*) die "Unsupported machine $machine for system $system";;
esac;;
darwin)
case $machine in
x86_64) target=x86_64-macos;;
arm64|aarch64) target=arm64-macos;;
*) die "Unsupported machine $machine for system $system";;
esac;;
*)
die "Unsupported system $system";;
esac esac
tmpdir=$(mktemp -d) || die "Failed to create tmpdir" tmpdir=$(mktemp -d) || die "Cannot create temporary directory"
trap "rm -rf $tmpdir" EXIT trap "rm -rf $tmpdir" EXIT
echo "Downloading latest $system release…" echo "Downloading latest $system release…"
curl -sLo "$tmpdir/himalaya.tar.gz" \ curl -sLo "$tmpdir/himalaya.tgz" \
"$RELEASES_URL/latest/download/himalaya-$system.tar.gz" "$RELEASES_URL/latest/download/himalaya.$target.tgz"
echo "Installing binary…" echo "Installing binary…"
tar -xzf "$tmpdir/himalaya.tar.gz" -C "$tmpdir" tar -xzf "$tmpdir/himalaya.tgz" -C "$tmpdir"
mkdir -p "$PREFIX/bin" mkdir -p "$PREFIX/bin"
cp -f -- "$tmpdir/$binary" "$PREFIX/bin/$binary" cp -f -- "$tmpdir/$binary" "$PREFIX/bin/$binary"
# See User Unit Search Path in `man systemd.unit(5)`
if [ "$system" = "linux" ] && [ "$PREFIX" = "/usr" ]; then
mkdir -p "$PREFIX/lib/systemd/user"
sed "s:%install_dir%:$PREFIX/bin:" "$tmpdir/assets/himalaya-watch@.service" \
> "$PREFIX/lib/systemd/user/himalaya-watch@.service"
fi
die "$("$PREFIX/bin/$binary" --version) installed!" 0 die "$("$PREFIX/bin/$binary" --version) installed!" 0

View file

@ -2,26 +2,23 @@ fenix:
let let
file = ./rust-toolchain.toml; file = ./rust-toolchain.toml;
sha256 = "e4mlaJehWBymYxJGgnbuCObVlqMlQSilZ8FljG9zPHY="; sha256 = "+syqAd2kX8KVa8/U2gz3blIQTTsYYt3U63xBWaGOSc8=";
in in
{ {
fromFile = { system }: fenix.packages.${system}.fromToolchainFile { fromFile = { system }: fenix.packages.${system}.fromToolchainFile {
inherit file sha256; inherit file sha256;
}; };
fromTarget = { pkgs, buildPlatform, targetPlatform ? null }: fromTarget = { pkgs, buildPlatform, targetPlatform }:
let let
inherit ((pkgs.lib.importTOML file).toolchain) channel; name = (pkgs.lib.importTOML file).toolchain.channel;
toolchain = fenix.packages.${buildPlatform}; fenixPackage = fenix.packages.${buildPlatform};
toolchain = fenixPackage.fromToolchainName { inherit name sha256; };
targetToolchain = fenixPackage.targets.${targetPlatform}.fromToolchainName { inherit name sha256; };
in in
if fenixPackage.combine [
isNull targetPlatform toolchain.rustc
then toolchain.cargo
fenix.packages.${buildPlatform}.${channel}.toolchain targetToolchain.rust-std
else
toolchain.combine [
toolchain.${channel}.rustc
toolchain.${channel}.cargo
toolchain.targets.${targetPlatform}.${channel}.rust-std
]; ];
} }

View file

@ -1,4 +1,4 @@
[toolchain] [toolchain]
channel = "stable" channel = "1.77.0"
profile = "default" profile = "default"
components = [ "rust-src", "rust-analyzer" ] components = [ "rust-src", "rust-analyzer" ]