Installation
With nix
Try it without installing anything:
nix run --accept-flake-config gitlab:c0va23/slop-review/stable
The flag lets it use the binary cache CI pushes to, so that is a download
rather than a compile. It is for trying this once: answering the prompt behind
it permanently writes ~/.local/share/nix/trusted-settings.json, a file
outside your configuration that no rebuild reproduces and nothing you version
tracks. The snippets below are the same setting where you can see it.
/stable is a branch, not a version. It moves to each new release and
nothing else, so a configuration naming it never has to be edited to upgrade —
nix flake update moves your lockfile to the newest release. Install from it.
Leave the /stable off and you get the default branch: work between releases,
and nothing puts it in the cache, so your machine compiles all of it.
On NixOS
# flake.nix
inputs.slop-review.url = "gitlab:c0va23/slop-review/stable";
# configuration.nix
imports = [ inputs.slop-review.nixosModules.default ];
programs.slop-review = {
enable = true;
cache.enable = true; # download builds instead of compiling them
};
With home-manager
Both switches are in the home module, so nothing here needs the system configuration:
imports = [ inputs.slop-review.homeModules.default ];
programs.slop-review = {
enable = true;
cache.enable = true; # download builds instead of compiling them
};
inputs only exists in a flake-based configuration. A plain home.nix has no
such argument — name the flake yourself:
let
slop-review = builtins.getFlake "gitlab:c0va23/slop-review/stable";
in
{
imports = [ slop-review.homeModules.default ];
programs.slop-review = { enable = true; cache.enable = true; };
}
The first switch compiles, unless you hand it the cache. cache.enable
writes the substituter into the generation it builds, and that generation
contains slop-review, so the switch that turns the cache on is built without
it. Give that one switch the setting on the command line, the way nix takes
any setting:
home-manager switch \
--option extra-substituters https://cache.slop-review.c0va23.dev \
--option extra-trusted-public-keys slop-review.c0va23.dev:9TgUtLvniTdru2q33XSSwkT72PdWTFSpjqiWRyOdnDE=
Every switch after it finds the substituter already in place.
nixos-rebuild switch takes the same two flags. On NixOS with the program in
home-manager, nixosModules.cache in the system configuration walks around
the problem instead: the rebuild that writes the substituter builds nothing
of slop-review.
If it compiles anyway, you are not a trusted user. The daemon reads a
user's substituters only for a user in trusted-users; check with
grep trusted-users /etc/nix/nix.conf. That is nix's rule for every cache, not
this one's. Where it does not hold, the cache has to be the machine's:
imports = [ inputs.slop-review.nixosModules.default ];
programs.slop-review.cache.enable = true;
Leave the cache out and everything still works; you compile instead of
downloading. On nix-darwin the cache half is spelled the same way. On a
machine with neither, nix.conf belongs to root:
# /etc/nix/nix.conf
extra-substituters = https://cache.slop-review.c0va23.dev
extra-trusted-public-keys = slop-review.c0va23.dev:9TgUtLvniTdru2q33XSSwkT72PdWTFSpjqiWRyOdnDE=
The home-manager option writes ~/.config/nix/nix.conf, which the daemon
honours for a trusted user and ignores for anyone else — silently, by
compiling. nixosModules.cache writes /etc/nix/nix.conf instead, which is
read whoever you are.
cache.enable appends to the substituters you already have and turning it
off takes exactly this back out. It is machine-wide, which is the honest cost:
every build on that machine will ask this bucket about paths that have nothing
to do with slop-review. The cache only holds what CI built, so a local edit or
a different nixpkgs misses it and compiles.
flake.nix also exposes overlays.default and nixosModules.cache, the cache
with no options attached.
Do not add inputs.nixpkgs.follows to this input. It is the usual
courtesy, and here it costs you every prebuilt binary: pointing this flake at
your nixpkgs changes every derivation hash in it, so nothing anyone has built
before matches.
Without nix
One file. Download it, make it executable, run it.
curl -LO https://dl.slop-review.c0va23.dev/slop-review/latest/slop-review-x86_64.AppImage
chmod +x slop-review-x86_64.AppImage
./slop-review-x86_64.AppImage
make appimage builds the same file from a checkout, with the same script CI
uses.
What rides along, and what stays yours. It carries difftastic, and only
because it has to: crates/core parses a JSON format difftastic itself calls
unstable, so the version has to be the one this was built against. Everything
else is your machine's. git and jj read your repository, so yours win.
enchant and your dictionaries are opened by name at run time, so a remark is
checked against the words you installed. GL, Vulkan, Wayland and X11 are
dlopened by name too, so the window draws on your driver.
What it needs from the machine. glibc 2.39 or newer — Ubuntu 24.04, Debian
13 and anything since. A desktop already has the rest; a bare
container needs libgl1, libglx-mesa0, libegl1, libgbm1,
libxkbcommon0, libxkbcommon-x11-0, libx11-6, libx11-xcb1, libxcb1,
libxcursor1, libxi6 and libxrandr2. The one worth knowing about is
libxkbcommon-x11-0: without it the window panics before drawing rather than
warning and carrying on.
If it will not mount itself, the machine has no usable FUSE — run it with
--appimage-extract-and-run, or set APPIMAGE_EXTRACT_AND_RUN=1.