#   ――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――
#   File: neovide.spec
#   Copyright 🄯 2025 Van de Bugger.
#   SPDX-License-Identifier: FSFAP
#   ――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――

%vdb

%bcond_with         check

Name:               neovide
Version:            0.14.1
Release:            0.vdb.2%{dist}
Summary:            A simple graphical user interface for Neovim
License:            MIT
URL:                https://%{name}.dev
Source0:            %{crates_source}

%global appid       dev.%{name}
    %{rem: Reversed URL w/o protocol.}

BuildRequires:      cargo
BuildRequires:      cargo-rpm-macros >= 24
BuildRequires:      desktop-file-utils
BuildRequires:      ImageMagick
BuildRequires:      %{__perl}
BuildRequires:      rust >= 1.82 %{rem: skia-safe@0.81.0 requires rustc 1.82.}
BuildRequires:      vdb-rpm-macros

BuildRequires:      freetype-devel
BuildRequires:      fontconfig-devel
BuildRequires:      libstdc++-devel

Requires(post):     desktop-file-utils
Requires(postun):   desktop-file-utils

%description
%{text -- \
    Neovide is a simple graphical user interface for Neovim (an aggressively refactored and updated
    Vim editor). Where possible there are some graphical improvements, but functionally it should
    act like the terminal UI.
}

%prep
%autosetup -n %{name}-%{version} -p1
# Extract images from .ico file. It contains several icons:
%{__mkdir} assets/icons
if [[ -x %{_bindir}/magick ]]; then
    %{_bindir}/magick assets/%{name}.ico -set 'filename:area' '%%wx%%h' 'assets/icons/%%[filename:area].png'
else
    %{_bindir}/convert assets/%{name}.ico -set 'filename:area' '%%wx%%h' 'assets/icons/%%[filename:area].png'
fi
%{__cp} assets/%{name}.desktop assets/%{appid}.desktop
%cargo_prep
%{__mv} .cargo/config.toml .cargo/config.toml.orig
%{__perl} -p \
    -e 'BEGIN { $/ = undef; }; ' \
    -e 's{^(\[net\]\noffline\h*=\h*)true(\n)}{$1false$2}m;' \
    -e 's{^\[source\.crates-io\]\nregistry\h*=\h*"https://crates\.io"\h*\nreplace-with\h*=\h*"local-registry"\n}{}m; ' \
    .cargo/config.toml.orig > .cargo/config.toml
%{__cargo} fetch

%build
%cargo_build
%{cargo_license_summary}
%{cargo_license} > LICENSE.dependencies

%install
%cargo_install
for icon in assets/icons/*.png; do
    size=$(basename "$icon" .png)
    %{__install} -D -m u=rw,go=r "$icon" "%{buildroot}/%{_iconsdir}/hicolor/$size/apps/%{appid}.png"
done
%{_bindir}/desktop-file-install --set-icon=%{appid} assets/%{appid}.desktop

%if %{with check}
%check
%cargo_test -a
desktop-file-validate assets/%{appid}.desktop
%endif

%files
%license LICENSE
%{_bindir}/%{name}
%{_iconsdir}/hicolor/*/apps/%{appid}.png
%{_datadir}/applications/%{appid}.desktop

%post
if [[ $1 == 1 ]]; then  # Install, not upgrade.
    %{_bindir}/update-desktop-database || :
    %{_bindir}/touch --no-create %{_iconsdir}/hicolor || :
    if [[ -x %{_bindir}/gtk-update-icon-cache ]]; then
        %{_bindir}/gtk-update-icon-cache --quiet %{_iconsdir}/hicolor || :
    fi
fi

%postun
# Uninstall or upgrade.
%{_bindir}/update-desktop-database || :
%{_bindir}/touch --no-create %{_iconsdir}/hicolor || :
if [[ -x %{_bindir}/gtk-update-icon-cache ]]; then
    %{_bindir}/gtk-update-icon-cache --quiet %{_iconsdir}/hicolor || :
fi

%changelog

* Fri Mar 21 2025 Van de Bugger - 0.14.1-0.vdb.2
- vdb.lua is in dedicated package.

* Tue Mar 18 2025 Van de Bugger - 0.14.1-0.vdb.1
- Initial release.

# end of file #