Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
28 changes: 8 additions & 20 deletions nixos/modules/config/system-path.nix
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,12 @@ in
description = "List of additional package outputs to be symlinked into <filename>/run/current-system/sw</filename>.";
};

extraSetup = mkOption {
type = types.lines;
default = "";
description = "Shell fragments to be run after the system environment has been created. This should only be used for things that need to modify the internals of the environment, e.g. generating MIME caches. The environment being built can be accessed at $out.";
};

};

system = {
Expand All @@ -107,12 +113,7 @@ in
"/etc/gtk-3.0"
"/lib" # FIXME: remove and update debug-info.nix
"/sbin"
"/share/applications"
"/share/desktop-directories"
"/share/emacs"
"/share/icons"
"/share/menus"
"/share/mime"
"/share/nano"
"/share/org"
"/share/themes"
Expand All @@ -132,28 +133,15 @@ in
# outputs TODO: note that the tools will often not be linked by default
postBuild =
''
if [ -x $out/bin/update-mime-database -a -w $out/share/mime ]; then
XDG_DATA_DIRS=$out/share $out/bin/update-mime-database -V $out/share/mime > /dev/null
fi

if [ -x $out/bin/gtk-update-icon-cache -a -f $out/share/icons/hicolor/index.theme ]; then
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This should probably be moved to xdg.icons

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hm, I wasn't sure about that - I thought maybe there should be a GTK module that does this?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Right, that looks like GTK thing: https://developer.gnome.org/gtk3/stable/gtk-update-icon-cache.html

We should probably get a module later.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Similarly for the glib schemas.

$out/bin/gtk-update-icon-cache $out/share/icons/hicolor
fi

if [ -x $out/bin/glib-compile-schemas -a -w $out/share/glib-2.0/schemas ]; then
$out/bin/glib-compile-schemas $out/share/glib-2.0/schemas
fi

if [ -x $out/bin/update-desktop-database -a -w $out/share/applications ]; then
$out/bin/update-desktop-database $out/share/applications
fi

if [ -x $out/bin/install-info -a -w $out/share/info ]; then
shopt -s nullglob
for i in $out/share/info/*.info $out/share/info/*.info.gz; do
$out/bin/install-info $i $out/share/info/dir
done
fi

${config.environment.extraSetup}
'';
};

Expand Down
22 changes: 22 additions & 0 deletions nixos/modules/config/xdg/autostart.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
{ config, lib, ... }:

with lib;
{
options = {
xdg.autostart.enable = mkOption {
type = types.bool;
default = true;
description = ''
Whether to install files to support the
<link xlink:href="https://specifications.freedesktop.org/autostart-spec/autostart-spec-latest.html">XDG Autostart specification</link>.
'';
};
};

config = mkIf config.xdg.autostart.enable {
environment.pathsToLink = [
"/etc/xdg/autostart"
];
};

}
27 changes: 27 additions & 0 deletions nixos/modules/config/xdg/icons.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
{ config, lib, ... }:

with lib;
{
options = {
xdg.icons.enable = mkOption {
type = types.bool;
default = true;
description = ''
Whether to install files to support the
<link xlink:href="https://specifications.freedesktop.org/icon-theme-spec/icon-theme-spec-latest.html">XDG Icon Theme specification</link>.
'';
};
};

config = mkIf config.xdg.icons.enable {
environment.pathsToLink = [
"/share/icons"
"/share/pixmaps"
];

environment.profileRelativeEnvVars = {
XCURSOR_PATH = [ "/share/icons" ];
};
};

}
25 changes: 25 additions & 0 deletions nixos/modules/config/xdg/menus.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
{ config, lib, ... }:

with lib;
{
options = {
xdg.menus.enable = mkOption {
type = types.bool;
default = true;
description = ''
Whether to install files to support the
<link xlink:href="https://specifications.freedesktop.org/menu-spec/menu-spec-latest.html">XDG Desktop Menu specification</link>.
'';
};
};

config = mkIf config.xdg.menus.enable {
environment.pathsToLink = [
"/share/applications"
"/share/desktop-directories"
"/etc/xdg/menus"
"/etc/xdg/menus/applications-merged"
];
};

}
36 changes: 36 additions & 0 deletions nixos/modules/config/xdg/mime.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
{ config, lib, pkgs, ... }:
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This module might also add shared-mime-info to environment.systemPackages to be linked into environment to fix bugs like #39493

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Aha, good catch. I had thought I could get away with removing them since the use of the binary is now encoded here, but it seems like it also has data to install.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed.


with lib;
{
options = {
xdg.mime.enable = mkOption {
type = types.bool;
default = true;
description = ''
Whether to install files to support the
<link xlink:href="https://specifications.freedesktop.org/shared-mime-info-spec/shared-mime-info-spec-latest.html">XDG Shared MIME-info specification</link> and the
<link xlink:href="https://specifications.freedesktop.org/mime-apps-spec/mime-apps-spec-latest.html">XDG MIME Applications specification</link>.
'';
};
};

config = mkIf config.xdg.mime.enable {
environment.pathsToLink = [ "/share/mime" ];

environment.systemPackages = [
# this package also installs some useful data, as well as its utilities
pkgs.shared-mime-info
];

environment.extraSetup = ''
if [ -w $out/share/mime ]; then
XDG_DATA_DIRS=$out/share ${pkgs.shared-mime-info}/bin/update-mime-database -V $out/share/mime > /dev/null
fi

if [ -w $out/share/applications ]; then
${pkgs.desktop-file-utils}/bin/update-desktop-database $out/share/applications
fi
'';
};

}
8 changes: 8 additions & 0 deletions nixos/modules/misc/documentation.nix
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,14 @@ let cfg = config.documentation; in
environment.systemPackages = [ pkgs.texinfoInteractive ];
environment.pathsToLink = [ "/share/info" ];
environment.extraOutputsToInstall = [ "info" ] ++ optional cfg.dev.enable "devinfo";
environment.extraSetup = ''
if [ -w $out/share/info ]; then
shopt -s nullglob
for i in $out/share/info/*.info $out/share/info/*.info.gz; do
${pkgs.texinfo}/bin/install-info $i $out/share/info/dir
done
fi
'';
})

(mkIf cfg.doc.enable {
Expand Down
4 changes: 4 additions & 0 deletions nixos/modules/module-list.nix
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,10 @@
./config/fonts/fontdir.nix
./config/fonts/fonts.nix
./config/fonts/ghostscript.nix
./config/xdg/autostart.nix
./config/xdg/icons.nix
./config/xdg/menus.nix
./config/xdg/mime.nix
./config/gnu.nix
./config/i18n.nix
./config/iproute2.nix
Expand Down
1 change: 0 additions & 1 deletion nixos/modules/programs/environment.nix
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,6 @@ in
GTK_PATH = [ "/lib/gtk-2.0" "/lib/gtk-3.0" ];
XDG_CONFIG_DIRS = [ "/etc/xdg" ];
XDG_DATA_DIRS = [ "/share" ];
XCURSOR_PATH = [ "/share/icons" ];
MOZ_PLUGIN_PATH = [ "/lib/mozilla/plugins" ];
LIBEXEC_PATH = [ "/lib/libexec" ];
};
Expand Down
10 changes: 7 additions & 3 deletions nixos/modules/services/networking/xrdp.nix
Original file line number Diff line number Diff line change
Expand Up @@ -93,10 +93,14 @@ in

config = mkIf cfg.enable {

# copied from <nixos/modules/services/x11/xserver.nix>
# xrdp can run X11 program even if "services.xserver.enable = false"
environment.pathsToLink =
[ "/etc/xdg" "/share/xdg" "/share/applications" "/share/icons" "/share/pixmaps" ];
xdg = {
autostart.enable = true;
menus.enable = true;
mime.enable = true;
icons.enable = true;
};

fonts.enableDefaultFonts = mkDefault true;

systemd = {
Expand Down
9 changes: 7 additions & 2 deletions nixos/modules/services/x11/desktop-managers/enlightenment.nix
Original file line number Diff line number Diff line change
Expand Up @@ -33,12 +33,17 @@ in
pkgs.xorg.xauth # used by kdesu
pkgs.gtk2 # To get GTK+'s themes.
pkgs.tango-icon-theme
pkgs.shared-mime-info

pkgs.gnome2.gnomeicontheme
pkgs.xorg.xcursorthemes
];

environment.pathsToLink = [ "/etc/enlightenment" "/etc/xdg" "/share/enlightenment" "/share/elementary" "/share/applications" "/share/locale" "/share/icons" "/share/themes" "/share/mime" "/share/desktop-directories" ];
environment.pathsToLink = [
"/etc/enlightenment"
"/share/enlightenment"
"/share/elementary"
"/share/locale"
];

services.xserver.desktopManager.session = [
{ name = "Enlightenment";
Expand Down
3 changes: 1 addition & 2 deletions nixos/modules/services/x11/desktop-managers/lumina.nix
Original file line number Diff line number Diff line change
Expand Up @@ -41,9 +41,8 @@ in

# Link some extra directories in /run/current-system/software/share
environment.pathsToLink = [
"/share/desktop-directories"
"/share/icons"
"/share/lumina"
# FIXME: modules should link subdirs of `/share` rather than relying on this
"/share"
];

Expand Down
5 changes: 4 additions & 1 deletion nixos/modules/services/x11/desktop-managers/plasma5.nix
Original file line number Diff line number Diff line change
Expand Up @@ -174,7 +174,10 @@ in
++ lib.optional config.services.colord.enable colord-kde
++ lib.optionals config.services.samba.enable [ kdenetwork-filesharing pkgs.samba ];

environment.pathsToLink = [ "/share" ];
environment.pathsToLink = [
# FIXME: modules should link subdirs of `/share` rather than relying on this
"/share"
];

environment.etc = singleton {
source = xcfg.xkbDir;
Expand Down
5 changes: 0 additions & 5 deletions nixos/modules/services/x11/desktop-managers/xfce.nix
Original file line number Diff line number Diff line change
Expand Up @@ -59,9 +59,6 @@ in
tango-icon-theme
xfce4-icon-theme

desktop-file-utils
shared-mime-info

# Needed by Xfce's xinitrc script
# TODO: replace with command -v
which
Expand Down Expand Up @@ -100,8 +97,6 @@ in
environment.pathsToLink = [
"/share/xfce4"
"/share/themes"
"/share/mime"
"/share/desktop-directories"
"/share/gtksourceview-2.0"
];

Expand Down
8 changes: 6 additions & 2 deletions nixos/modules/services/x11/xserver.nix
Original file line number Diff line number Diff line change
Expand Up @@ -616,8 +616,12 @@ in
]
++ optional (elem "virtualbox" cfg.videoDrivers) xorg.xrefresh;

environment.pathsToLink =
[ "/etc/xdg" "/share/xdg" "/share/applications" "/share/icons" "/share/pixmaps" ];
xdg = {
autostart.enable = true;
menus.enable = true;
mime.enable = true;
icons.enable = true;
};

# The default max inotify watches is 8192.
# Nowadays most apps require a good number of inotify watches,
Expand Down