Skip to content

Commit

Permalink
Merge pull request #42562 from ambrop72/gdk-pixbuf-fix
Browse files Browse the repository at this point in the history
Use a NixOS module for generating the gdk-pixbuf loaders cache.
  • Loading branch information
jtojnar committed Oct 12, 2018
2 parents 6bd73e8 + d9fa88d commit a112f16
Show file tree
Hide file tree
Showing 4 changed files with 50 additions and 5 deletions.
1 change: 1 addition & 0 deletions nixos/modules/module-list.nix
Expand Up @@ -742,6 +742,7 @@
./services/x11/hardware/multitouch.nix
./services/x11/hardware/synaptics.nix
./services/x11/hardware/wacom.nix
./services/x11/gdk-pixbuf.nix
./services/x11/redshift.nix
./services/x11/urxvtd.nix
./services/x11/window-managers/awesome.nix
Expand Down
6 changes: 2 additions & 4 deletions nixos/modules/services/x11/desktop-managers/plasma5.nix
Expand Up @@ -185,10 +185,8 @@ in
target = "X11/xkb";
};

environment.variables = {
# Enable GTK applications to load SVG icons
GDK_PIXBUF_MODULE_FILE = "${pkgs.librsvg.out}/lib/gdk-pixbuf-2.0/2.10.0/loaders.cache";
};
# Enable GTK applications to load SVG icons
services.xserver.gdk-pixbuf.modulePackages = [ pkgs.librsvg ];

fonts.fonts = with pkgs; [ noto-fonts hack-font ];
fonts.fontconfig.defaultFonts = {
Expand Down
3 changes: 2 additions & 1 deletion nixos/modules/services/x11/desktop-managers/xfce.nix
Expand Up @@ -101,10 +101,11 @@ in
];

environment.variables = {
GDK_PIXBUF_MODULE_FILE = "${pkgs.librsvg.out}/lib/gdk-pixbuf-2.0/2.10.0/loaders.cache";
GIO_EXTRA_MODULES = [ "${pkgs.xfce.gvfs}/lib/gio/modules" ];
};

services.xserver.gdk-pixbuf.modulePackages = [ pkgs.librsvg ];

services.xserver.desktopManager.session = [{
name = "xfce";
bgSupport = true;
Expand Down
45 changes: 45 additions & 0 deletions nixos/modules/services/x11/gdk-pixbuf.nix
@@ -0,0 +1,45 @@
{ config, lib, pkgs, ... }:

with lib;

let
cfg = config.services.xserver.gdk-pixbuf;

# Get packages to generate the cache for. We always include gdk_pixbuf.
effectivePackages = unique ([pkgs.gdk_pixbuf] ++ cfg.modulePackages);

# Generate the cache file by running gdk-pixbuf-query-loaders for each
# package and concatenating the results.
loadersCache = pkgs.runCommand "gdk-pixbuf-loaders.cache" {} ''
(
for package in ${concatStringsSep " " effectivePackages}; do
module_dir="$package/${pkgs.gdk_pixbuf.moduleDir}"
if [[ ! -d $module_dir ]]; then
echo "Warning (services.xserver.gdk-pixbuf): missing module directory $module_dir" 1>&2
continue
fi
GDK_PIXBUF_MODULEDIR="$module_dir" \
${pkgs.gdk_pixbuf.dev}/bin/gdk-pixbuf-query-loaders
done
) > "$out"
'';
in

{
options = {
services.xserver.gdk-pixbuf.modulePackages = mkOption {
type = types.listOf types.package;
default = [ ];
description = "Packages providing GDK-Pixbuf modules, for cache generation.";
};
};

# If there is any package configured in modulePackages, we generate the
# loaders.cache based on that and set the environment variable
# GDK_PIXBUF_MODULE_FILE to point to it.
config = mkIf (cfg.modulePackages != []) {
environment.variables = {
GDK_PIXBUF_MODULE_FILE = "${loadersCache}";
};
};
}

0 comments on commit a112f16

Please sign in to comment.