xdg: add modules for supporting various XDG specs

wip/yesman
Michael Peyton Jones 6 years ago
parent 52e7817aa2
commit 13e2e19158
No known key found for this signature in database
GPG Key ID: 86A43C24A728F66D
  1. 17
      nixos/modules/config/system-path.nix
  2. 22
      nixos/modules/config/xdg/autostart.nix
  3. 27
      nixos/modules/config/xdg/icons.nix
  4. 25
      nixos/modules/config/xdg/menus.nix
  5. 26
      nixos/modules/config/xdg/mime.nix
  6. 4
      nixos/modules/module-list.nix
  7. 1
      nixos/modules/programs/environment.nix
  8. 10
      nixos/modules/services/networking/xrdp.nix
  9. 9
      nixos/modules/services/x11/desktop-managers/enlightenment.nix
  10. 3
      nixos/modules/services/x11/desktop-managers/lumina.nix
  11. 5
      nixos/modules/services/x11/desktop-managers/plasma5.nix
  12. 5
      nixos/modules/services/x11/desktop-managers/xfce.nix
  13. 8
      nixos/modules/services/x11/xserver.nix

@ -107,12 +107,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"
@ -132,10 +127,6 @@ 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
$out/bin/gtk-update-icon-cache $out/share/icons/hicolor
fi
@ -144,16 +135,16 @@ in
$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
'' ++ optionalString config.xdg.mime.enable ''
XDG_DATA_DIRS=$out/share ${pkgs.shared-mime-info}/bin/update-mime-database -V $out/share/mime > /dev/null
${pkgs.desktop-file-utils}/bin/update-desktop-database $out/share/applications
'';
};

@ -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"
];
};
}

@ -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" ];
};
};
}

@ -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"
];
};
}

@ -0,0 +1,26 @@
{ config, lib, pkgs, ... }:
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
];
};
}

@ -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

@ -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" ];
};

@ -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 = {

@ -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";

@ -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"
];

@ -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;

@ -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
@ -100,8 +97,6 @@ in
environment.pathsToLink = [
"/share/xfce4"
"/share/themes"
"/share/mime"
"/share/desktop-directories"
"/share/gtksourceview-2.0"
];

@ -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,

Loading…
Cancel
Save