Thumbnails
Enabling Thumbnailers
On minimal / custom desktop environments thumbnails in file explorers may not work by default. For example:
- GNOME environments with the option
services.gnome.core-utilities.enable = false;
- Custom environments built using window managers like sway or hyperland
Enable Video Thumbnails
To enable thumbnails for video files use ffmpeg-headless
to decode videos and fmpegthumbnailer
to generate thumbnails.
Thumbnails for the following MimeTypes are enabled: video/jpeg; video/mp4; video/mpeg; video/quicktime; video/x-ms-asf; video/x-ms-wm; video/x-ms-wmv; video/x-ms-asx; video/x-ms-wmx; video/x-ms-wvx; video/x-msvideo; video/x-flv; video/x-matroska; application/x-matroska; application/mxf; video/3gp; video/3gpp; video/dv; video/divx; video/fli; video/flv; video/mp2t; video/mp4v-es; video/msvideo; video/ogg; video/vivo; video/vnd.avi; video/vnd.divx; video/vnd.mpegurl; video/vnd.rn-realvideo; application/vnd.rn-realmedia; video/vnd.vivo; video/webm; video/x-anim; video/x-avi; video/x-flc; video/x-fli; video/x-flic; video/x-m4v; video/x-mpeg; video/x-mpeg2; video/x-nsv; video/x-ogm+ogg; video/x-theora+ogg.
# configuration.nix
{ pkgs, ... }:
{
environment.systemPackages = with pkgs; [
ffmpeg-headless
ffmpegthumbnailer
];
# 'ffmpegthumbnailer.thumbnailer' is created in '/run/current-system/sw/share/thumbnailers'
# but thumbnails are not displayed unless symlinks to 'share/thumbnailers' are also defined
# uncomment if this has already been defined in your configuration.nix
environment.pathsToLink = [
"share/thumbnailers"
];
}
Enable Image Thumbnails
To enable thumbnails for image files use gdk-pixbuf
to decode images and generate thumbnails.
Thumbnails for the following MimeTypes are enabled: image/png; image/jpeg; image/bmp; image/x-bmp; image/x-MS-bmp; image/gif; image/x-icon; image/x-ico; image/x-win-bitmap; image/vnd.microsoft.icon; application/ico; image/ico; image/icon; text/ico; image/x-portable-anymap; image/x-portable-bitmap; image/x-portable-graymap; image/x-portable-pixmap; image/tiff; image/x-xpixmap; image/x-xbitmap; image/x-tga; image/x-icns; image/x-quicktime; image/qtif.
# configuration.nix
{ pkgs, ... }:
{
environment.systemPackages = with pkgs; [
gdk-pixbuf
];
# 'gdk-pixbuf-thumbnailer.thumbnailer' is created in '/run/current-system/sw/share/thumbnailers'
# but thumbnails are not displayed unless symlinks to 'share/thumbnailers' are also defined
# uncomment if this has already been defined in your configuration.nix
environment.pathsToLink = [
"share/thumbnailers"
];
}
Enable HEIF Image Thumbnails
To enable thumbnails for HEIF image format use libheif
to decode HEIF images and libheif.out
to generate thumbnails.
Thumbnails for the following MimeTypes are enabled: image/heif; image/avif.
# configuration.nix
{ pkgs, ... }:
{
environment.systemPackages = with pkgs; [
libheif
libheif.out
];
# 'heif.thumbnailer' is created in '/run/current-system/sw/share/thumbnailers'
# but thumbnails are not displayed unless symlinks to 'share/thumbnailers' are also defined
# uncomment if this has already been defined in your configuration.nix
environment.pathsToLink = [
"share/thumbnailers"
];
}
Enable RAW (Camera) Image Thumbnails
nufraw-thumbnailer
To enable thumbnails for camera RAW format use nufraw
to decode RAW images and nufraw-thumbnailer
to generate thumbnails.
Thumbnails for the following MimeTypes are enabled: image/x-canon-cr2;image/x-canon-crw;image/x-minolta-mrw;image/x-nikon-nef;image/x-pentax-pef;image/x-panasonic-rw2;image/x-panasonic-raw2;image/x-samsung-srw;image/x-olympus-orf;image/x-sony-arw.
# configuration.nix
{ pkgs, ... }:
{
environment.systemPackages = with pkgs; [
nufraw
nufraw-thumbnailer
];
# 'nufraw.thumbnailer' is created in '/run/current-system/sw/share/thumbnailers'
# but thumbnails are not displayed unless symlinks to 'share/thumbnailers' are also defined
# uncomment if this has already been defined in your configuration.nix
environment.pathsToLink = [
"share/thumbnailers"
];
}
By default nufraw-thumbnailer
- creates thumbnails using the embedded 'jpeg' in the camera raw files. (
--noexif
) - does not respect the EXIF metadata. (
--embedded-image
)
Output of cat /run/current-system/sw/share/thumbnailers/nufraw.thumbnailer
:
[Thumbnailer Entry]
TryExec=/nix/store/piss9dl8i5xnfm5yagdffgxycm8lsqpl-nufraw-0.43-3/bin/nufraw-batch
Exec=/nix/store/piss9dl8i5xnfm5yagdffgxycm8lsqpl-nufraw-0.43-3/bin/nufraw-batch --silent --size %s --out-type=png --noexif --output=%o --embedded-image %i
MimeType=image/x-canon-cr2;image/x-canon-crw;image/x-minolta-mrw;image/x-nikon-nef;image/x-pentax-pef;image/x-panasonic-rw2;image/x-panasonic-raw2;image/x-samsung-srw;image/x-olympus-orf;image/x-sony-arw
Additional cameras[1] beyond those listed in the stock nufraw.thumbnailer
file are also supported. The following additional MimeTypes are supported: image/x-adobe-dng; image/x-dcraw; image/x-fuji-raf; image/x-kodak-dcr; image/x-kodak-k25; image/x-kodak-kdc; image/x-nikon-nrw; image/x-panasonic-raw; image/x-sigma-x3f; image/x-sony-srf; image/x-sony-sr2
Eg: Generate thumbnails from 'raw' data (not 'embedded jpeg') + respect EXIF (eg: rotation) metadata + add support for additional camera formats
# configuration.nix
{ pkgs, ... }:
{
environment.systemPackages = [
nufraw
nufraw-thumbnailer
# Thumbnails form 'raw' data and include EXIF tags for Adobe-DNG images
(writeTextDir "share/thumbnailers/my-custom-nufraw.thumbnailer" ''
[Thumbnailer Entry]
TryExec=nufraw-batch
Exec=nufraw-batch --silent --size %s --out-type=png --output=%o %i
MimeType=image/x-adobe-dng;image/x-dng;
'';)
# MimeTypes not listed here but listed in the default nufraw.thumbnailer will continue displaying
# thumbnails generated form the 'embedded jpeg' without the EXIF metadata
];
# uncomment if this has already been defined in your configuration.nix
environment.pathsToLink = [
"share/thumbnailers"
];
}
gdk-pixbuf thumbnailer
The gdk-pixbuf thumbnailer can also generate thumbnails (from the 'embedded jpeg') for RAW camera image formats. It cannot decode the 'raw' image data but can read the 'embedded jpeg'.
# configuration.nix
{ pkgs, ... }:
{
environment.systemPackages = [
gdk-pixbuf
(writeTextDir "share/thumbnailers/my-custom-nufraw.thumbnailer" ''
[Thumbnailer Entry]
TryExec=gdk-pixbuf-thumbnailer
Exec=gdk-pixbuf-thumbnailer -s %s %u %o
MimeType=image/x-adobe-dng;image/x-dng;image/x-canon-cr2;image/x-canon-crw;image/x-cr2;image/x-crw;
'';)
];
# uncomment if this has already been defined in your configuration.nix
environment.pathsToLink = [
"share/thumbnailers"
];
}
Creating Custom Thumbnailers
Most package mangers accept the Thumbnail Managing Standard, by using it you can create your own thumbnailer for any file format, this can be done by:
- First you need to figure out how to create a
.png
image from a file in the desired format. - Create a
.thumbnailer
file in$XDG_DATA_DIRS/thumbnailers
. - Restart your thumbnailer service (This is specific to each file manager) and test if it's working.
Example
You could create a thumbnailer for Krita's .kra
file format like so:
.kra
are zip files, with a preview stored at /preview.png
, we can use unzip to extract the preview:
unzip -p robot-squirrel.kra preview.png > robot-squirrel.png
Create a .thumbnailer
file in any $XDG_DATA_DIRS/thumbnailers
directory.
# $HOME/.local/share/thumbnailers/kra.thumbnailer
[Thumbnailer Entry]
Exec=sh -c "unzip -p %i preview.png > %o"
MimeType=application/x-krita;
Restart your thumbnailer service (This is specific to each file manager) and test if it's working.
After you have a working definition, you can make it reproducible like so:
# configuration.nix
{ pkgs, ... }: {
environment.systemPackages = [
(
pkgs.writeTextFile {
# This can be anything, it's just the name of the derivation in the nix store
name = "krita-thumbnailer";
# This is the important part, the path under which this will be installed
destination = "/share/thumbnailers/kra.thumbnailer";
# The contents of your thumbnailer, don't forget to specify the full path to executables
text = ''
[Thumbnailer Entry]
Exec=sh -c "${pkgs.unzip}/bin/unzip -p %i preview.png > %o"
MimeType=application/x-krita;
'';
}
)
];
}