Commit e1c56598 authored by Naoki OKAMURA's avatar Naoki OKAMURA

incompatible change: re-structured file splitting

parent 17d62daa
{ config, pkgs, ... }:
let
browsers = with pkgs; [
firefox-bin
keepassxc
];
files = with pkgs; [
gnome3.nautilus
gnome3.file-roller
];
terminal = with pkgs; [
mlterm
];
utilities = with pkgs; [
xclip xdg_utils pavucontrol
];
systems = with pkgs; [
gnome3.dconf-editor
gnome3.dconf
gnome2.GConf
gnome3.glib.dev
dbus-glib
] ++ [ config.i18n.inputMethod.package ];
apps = browsers ++ files ++ terminal ++ utilities ++ systems ;
# copied from https://github.com/NixOS/nixpkgs/blob/master/nixos/modules/services/x11/desktop-managers/gnome3.nix#L27
# this code is under MIT-licensed: the https://github.com/NixOS/nixpkgs/blob/master/COPYING
nixos-gsetings-desktop-schemas = pkgs.runCommand "nixos-gsettings-schemas" {}
''
export outdir=$out/share/gsettings-schemas/nixos-gsettings-overrides/glib-2.0/schemas
mkdir -p $outdir
cp -Rf ${pkgs.gnome3.gsettings-desktop-schemas}/share/gsettings-schemas/gsettings-desktop-schemas*/glib-2.0/schemas/*.xml $outdir
${pkgs.stdenv.lib.concatMapStrings (p: ''
files="''$(echo ${p}/share/gsettings-schemas/*/glib-2.0/schemas/*.xml)"
if test "''${files}" != "" ; then
cp -Rf "''${files}" $outdir
fi
'') apps}
chmod -R a+w $out/share/gsettings-schemas/nixos-gsettings-overrides
cat - >$outdir/nixos-defaults.gschema.overrides <<- EOF
[org.gnome.desktop.background]
picture-uri="${pkgs.nixos-artwork.wallpapers.gnome-dark}/share/artwork/gnome/Gnome_Dark.png"
[org.gnome.desktop.screensaver]
picture-uri="${pkgs.nixos-artwork.wallpapers.gnome-dark}/share/artwork/gnome/Gnome_Dark.png"
EOF
${pkgs.glib.dev}/bin/glib-compile-schemas $outdir
'';
# copied and modified from https://github.com/NixOS/nixpkgs/blob/master/nixos/modules/services/x11/desktop-managers/gnome3.nix#L129
# this code is under MIT-licensed: the https://github.com/NixOS/nixpkgs/blob/master/COPYING
extraInit = ''
export GTK_DATA_PREFIX=${config.system.path}
export GTK_PATH=${config.system.path}/lib/gtk-3.0:${config.system.path}/lib/gtk-2.0
${pkgs.stdenv.lib.concatMapStrings (p: ''
if test -d "${p}/share/gsettings-schemas/${p.name}" ; then
export XDG_DATA_DIRS="$XDG_DATA_DIRS''${XDG_DATA_DIRS:+:}${p}/share/gsettings-schemas/${p.name}";
fi
if test -d "${p}/share/girepository-1.0" ; then
export GI_TYPELIB_PATH="$GI_TYPELIB_PATH''${GT_TYPELIB_PATH:+:}${p}/lib/girepository-1.0"
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH''${LD_LIBRARY_PATH:+:}${p}/lib"
fi
'') apps}
export GIO_EXTRA_MODULES="GIO_EXTRA_MODULES''${GIO_EXTRA_MODULES}${pkgs.gnome3.dconf.lib}/lib/gio/modules:${pkgs.gvfs}/lib/gio/modules"
export NIX_GSETTINGS_OVERRIDES_DIR="${nixos-gsetings-desktop-schemas}/share/gsettings-schemas/nixos-gsettings-overrides/glib-2.0/schemas"
export NAUTILUS_EXTENSION_DIR="${config.system.path}/lib/nautilus/extendions-3.0"
export XCURSOR_PATH="~/.icons/:${config.system.path}/share/icons"
'';
in {
programs.dconf.enable = true;
services.gnome3.gvfs.enable = true;
services.udisks2.enable = true;
security.polkit.extraConfig = ''
polkit.addRule(function(action, subject) {
if (action.id == "org.freedesktop.udisks2.filesystem-mount-system" && subject.isInGroup("storage")) {
return polkit.Result.YES;
}
});
'';
environment.extraInit = extraInit;
environment.systemPackages = apps;
}
{ config, pkgs, ... }:
let
bspwmInit = pkgs.writeScript "bspwmrc" ''
#!/bin/sh
${pkgs.gnome3.dconf.lib}/libexec/dconf-service &
${pkgs.gnome2.GConf}/libexec/gconfd-2 &
${config.i18n.inputMethod.package}/bin/ibus-daemon -drx --config=${config.i18n.inputMethod.package}/libexec/ibus-gconf
${config.hardware.pulseaudio.package}/bin/pulseaudio -k
${config.hardware.pulseaudio.package}/bin/pulseaudio -D
exec /etc/nixos/dotfiles/nyarla/bspwm/bspwmrc
'';
in
{
services.xserver = {
desktopManager.xterm.enable = false;
windowManager = {
bspwm = {
enable = true;
configFile = "${bspwmInit}";
sxhkd.configFile = "/etc/nixos/dotfiles/nyarla/sxhkd/sxhkdrc";
};
};
};
environment.etc."X11/XLaunchXRDP" = {
mode = "0755";
text = ''
#!/bin/sh
export _JAVA_AWT_WM_NONREPARENTING=1
${pkgs.xorg.xsetroot}/bin/xsetroot -solid "#242424" -cursor_name left_ptr
SXHKD_SHELL=/bin/sh ${config.services.xserver.windowManager.bspwm.sxhkd.package}/bin/sxhkd -c /etc/nixos/dotfiles/nyarla/sxhkd/sxhkdrc &
exec ${config.services.xserver.windowManager.bspwm.package}/bin/bspwm -c "${bspwmInit}"
'';
};
environment.systemPackages = with pkgs; [
polybar xtitle psmisc
];
}
{ config, pkgs, ... }:
let
applications = with pkgs; [
# web
firefox-bin
rambox
# files
gnome3.nautilus
gnome3.file-roller
# creations
lmms
aseprite
krita
gimp
# credentials
keepassxc
# development
mlterm
vimHugeX
jetbrains.idea-community jre wmname xtitle
tigervnc mirrordtc-client
# wine
wineFull winetricks
#vmware-workstation-player
# utilities
light xclip xss-lock alock
connman-gtk
jack2Full qjackctl pavucontrol
dunst
# bar
polybar
# gtk3
gnome3.dconf-editor
gnome3.dconf
gnome3.gconf.out
gnome3.glib.dev
dbus-glib
] ++ [ config.i18n.inputMethod.package ];
# copied from https://github.com/NixOS/nixpkgs/blob/master/nixos/modules/services/x11/desktop-managers/gnome3.nix#L27
# this code is under MIT-licensed: the https://github.com/NixOS/nixpkgs/blob/master/COPYING
nixos-gsettings-desktop-schemas = pkgs.runCommand "nixos-gsettings-desktop-schemas" {}
''
mkdir -p $out/share/gsettings-schemas/nixos-gsettings-overrides/glib-2.0/schemas/
cp -rf ${pkgs.gnome3.gsettings-desktop-schemas}/share/gsettings-schemas/gsettings-desktop-schemas*/glib-2.0/schemas/*.xml $out/share/gsettings-schemas/nixos-gsettings-overrides/glib-2.0/schemas/
${pkgs.stdenv.lib.concatMapStrings (pkg: ''
files="$(echo ${pkg}/share/gsettings-schemas/*/glib-2.0/schemas/*.xml)"
if test "''${files}" != "" ; then
cp -rf "''${files}" $out/share/gsettings-schemas/nixos-gsettings-overrides/glib-2.0/schemas
fi
'') applications}
chmod -R a+w $out/share/gsettings-schemas/nixos-gsettings-overrides
cat - > $out/share/gsettings-schemas/nixos-gsettings-overrides/glib-2.0/schemas/nixos-defaults.gschema.override <<- EOF
[org.gnome.desktop.background]
picture-uri='${pkgs.nixos-artwork.wallpapers.gnome-dark}/share/artwork/gnome/Gnome_Dark.png'
[org.gnome.desktop.screensaver]
picture-uri='${pkgs.nixos-artwork.wallpapers.gnome-dark}/share/artwork/gnome/Gnome_Dark.png'
EOF
${pkgs.glib.dev}/bin/glib-compile-schemas $out/share/gsettings-schemas/nixos-gsettings-overrides/glib-2.0/schemas/
'';
# end of copy
in
{
environment.systemPackages = applications;
services.dbus.packages = applications;
# copied and modified from https://github.com/NixOS/nixpkgs/blob/master/nixos/modules/services/x11/desktop-managers/gnome3.nix#L129
# this code is under MIT-licensed: the https://github.com/NixOS/nixpkgs/blob/master/COPYING
environment.extraInit = ''
export GTK_DATA_PREFIX=${config.system.path}
export GTK_PATH=${config.system.path}/lib/gtk-3.0:${config.system.path}/lib/gtk-2.0
${pkgs.stdenv.lib.concatMapStrings (p: ''
if test -d "${p}/share/gsettings-schemas/${p.name}" ; then
export XDG_DATA_DIRS="$XDG_DATA_DIRS''${XDG_DATA_DIRS:+:}${p}/share/gsettings-schemas/${p.name}"
fi
if test -d "${p}/lib/girepository-1.0" ; then
export GI_TYPELIB_PATH="$GI_TYPELIB_PATH''${GT_TYPELIB_PATH:+:}${p}/lib/girepository-1.0"
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH''${LD_LIBRARY_PAYT:+:}${p}/lib"
fi
'') applications}
export GIO_EXTRA_MODULES="$GIO_EXTRA_MODULES''${GIO_EXTRA_MODULES:+:}${pkgs.gnome3.dconf.lib}/lib/gio/modules:${pkgs.gvfs}/lib/gio/modules"
export NIX_GSETTINGS_OVERRIDES_DIR=${nixos-gsettings-desktop-schemas}/share/gsettings-schemas/nixos-gsettings-overrides/glib-2.0/schemas
export NAUTILUS_EXTENSION_DIR=${config.system.path}/lib/nautilus/extensions-3.0/
export XCURSOR_PATH=~/.icons:${config.system.path}/share/icons
'';
# end of copy
# for nautilus
services.gnome3.gvfs.enable = true;
services.udisks2.enable = true;
security.polkit.extraConfig = ''
polkit.addRule(function(action, subject) {
if (action.id == "org.freedesktop.udisks2.filesystem-mount-system" && subject.isInGroup("storage")) {
return polkit.Result.YES;
}
});
'';
# for jack2
security.wrappers.jackd = {
source = "${pkgs.jack2Full}/bin/jackd";
capabilities = "cap_ipc_lock+ep";
};
security.wrappers.wine-preloader = {
source = "${pkgs.wineFull}/bin/wine-preloader";
capabilities = "cap_ipc_lock+ep";
};
security.wrappers.wine64-preloader = {
source = "${pkgs.wineFull}/bin/wine64-preloader";
capabilities = "cap_ipc_lock+ep";
};
# for Java Apps
environment.variables = {
_JAVA_AWT_WM_NONREPARENTING = "1";
};
}
{ config, pkgs, ... }:
let
gtkTheme = pkgs.materia-theme;
iconThemes = with pkgs; [
papirus-icon-theme
paper-icon-theme
gnome3.adwaita-icon-theme
hicolor-icon-theme
];
iconThemeBundle = pkgs.stdenv.mkDerivation {
name = "icon-theme-bundle";
unpackPhase = "true";
buildInputs = iconThemes;
installPhase = ''
mkdir -p $out/share/icons/default
cat <<EOF >$out/share/icons/default/index.theme
[Icon Theme]
Name=Default
Comment=Default Icon Theme
Inherits=Papirus,Paper,Adwaita
EOF
'';
};
themeInit = ''
test -d ~/.config/gtk-3.0/settings.ini && rm ~/.config/gtk-3.0/settings.ini
export XDG_DATA_DIRS="$XDG_DATA_DIRS''${XDG_DATA_DIRS:+:}${iconThemeBundle}/share:${gtkTheme}/share"
export XDG_CONFIG_DIRS="$XDG_CONFIG_DIRS''${XDG_CONFIG_DIRS:+:}/etc/xdg"
export GTK2_RC_FILES="${pkgs.writeText "iconrc" ''
gtk-icon-theme-name = "Default"
gtk-cursor-theme-name = "Default"
gtk-theme-name = "Materia-compact"
''}"
export GDK_PIXBUF_MODULE_FILE="$(echo ${pkgs.librsvg.out}/lib/gdk-pixbuf-2.0/*/loaders.cache)"
export XCURSOR_THEME="Default"
export XCURSOR_SIZE="48"
${pkgs.xorg.xrdb}/bin/xrdb -merge "${pkgs.writeText "Xcursor" ''
Xcursor*theme: Default
Xcursor*size: 48
''}"
${pkgs.xorg.xsetroot}/bin/xsetroot -cursor_name left_ptr
'';
wrapperGtkGreeter = pkgs.runCommand "lightdm-gtk-greeter" {
buildInputs = [ pkgs.makeWrapper ];
} ''
makeWrapper ${pkgs.lightdm_gtk_greeter}/sbin/lightdm-gtk-greeter \
$out/greeter \
--prefix PATH : "${pkgs.glibc.bin}/bin" \
--set GDK_PIXBUF_MODULE_FILE "${pkgs.gdk_pixbuf.out}/lib/gdk-pixbuf-2.0/2.10.0/loaders.cache" \
--set GTK_PATH "${gtkTheme}:${pkgs.gtk3.out}" \
--set GTK_EXE_PREFIX "${gtkTheme}" \
--set GTK_DATA_PREFIX "${gtkTheme}" \
--set XDG_DATA_DIRS "${gtkTheme}/share:/run/current-system/sw/share" \
--set XDG_CONFIG_HOME "${gtkTheme}/share" \
--set XCURSOR_PATH "/run/current-system/sw/share/icons" \
--set XCURSOR_SIZE "48"
cat <<EOF >$out/lightdm-gtk-greeter.desktop
[Desktop Entry]
Name=LightDM Greeter
Comment=This runs the LightDM Greeter
Exec=$out/greeter
Type=Application
EOF
'';
in {
services.xserver.displayManager.lightdm = {
background = "#242424";
greeter.package = wrapperGtkGreeter;
greeters.gtk = {
iconTheme = {
name = "Default";
package = iconThemeBundle;
};
theme = {
name = "Materia-compact";
package = gtkTheme;
};
extraConfig = ''
# Appearance
user-background = false
# Fonts
font-name = Monospace 12
# Panel
clock-format = %Y-%m-%dT%H:%M:%S
indicators = ~host;~spacer;~session;~clock;~power
# Cursor
cursor-theme-name = Default
'';
};
};
services.xserver.desktopManager.xterm.enable = false;
programs.qt5ct.enable = true;
environment.etc."xdg/gtk-3.0/settings.ini" = {
text = ''
[Settings]
gtk-icon-theme-name = Default
gtk-cursor-theme-name = Default
gtk-theme-name = Materia-compact
'';
mode = "444";
};
environment.systemPackages = (with pkgs; [
libsForQt5.qtstyleplugins
gtk-engine-murrine
]) ++ [
iconThemeBundle
] ++ iconThemes;
environment.extraInit = ''
${themeInit}
export XDG_CONFIG_HOME=$HOME/.config
export XDG_DATA_HOME=$HOME/.local/share
export XDG_CACHE_HOME=$HOME/.cache
'';
environment.pathsToLink = [ "/share" ];
}
{ config, pkgs, ... }:
let
lockcmd = ''${pkgs.alock}/bin/alock -auth pam -bg blank:color=rgb:36/36/36 -cursor none -input frame:input=rgb:CD/EE/69,check=rgb:FF/E3/77,error=rgb:C7/56/46'';
in {
services.xserver = {
enable = true;
autorun = true;
libinput = {
enable = true;
naturalScrolling = true;
sendEventsMode = "disabled-on-external-mouse";
};
displayManager = {
job.preStart = ''
${pkgs.coreutils}/bin/echo -n "0000:00:14.0" | ${pkgs.coreutils}/bin/tee /sys/bus/pci/drivers/xhci_hcd/unbind
${pkgs.coreutils}/bin/echo -n "0000:00:14.0" | ${pkgs.coreutils}/bin/tee /sys/bus/pci/drivers/xhci_hcd/bind
'';
lightdm = {
enable = true;
greeters = {
gtk = {
enable = true;
};
};
};
};
xautolock = {
enable = true;
locker = lockcmd;
nowlocker = lockcmd;
time = 5;
};
windowManager = {
bspwm = {
enable = true;
configFile = "${pkgs.writeScript "bspwmrc" ''
#!/usr/bin/env bash
# preStart
${pkgs.xss-lock}/bin/xss-lock -- ${lockcmd} &
${pkgs.gnome3.dconf.lib}/libexec/dconf-service &
${pkgs.gnome3.gconf.out}/libexec/gconfd-2 &
${pkgs.synergy}/bin/synergys -c "${pkgs.writeText "synergy-server.conf" ''
section: screens
NyXPS15:
nymac.local:
end
section: aliases
NyXPS15:
10.10.10.1
nymac.local:
10.10.10.2
end
section: links
NyXPS15:
left = nymac.local
nymac.local:
right = NyXPS15
end
''}" -f -a 10.10.10.1 -n NyXPS15 &
env GDK_SCALE=1 GDK_DPI_SCALE=1 ${config.i18n.inputMethod.package}/bin/ibus-daemon -drx --config=${config.i18n.inputMethod.package}/libexec/ibus-gconf
exec /etc/nixos/dotfiles/nyarla/bspwm/bspwmrc
''}";
sxhkd = {
configFile = "/etc/nixos/dotfiles/nyarla/sxhkd/sxhkdrc";
};
};
};
};
services.compton = {
enable = true;
fade = true;
shadow = true;
fadeDelta = 5;
fadeSteps = [ "0.014" "0.015" ];
shadowOpacity = "0.31";
};
programs.qt5ct.enable = true;
}
{ config, pkgs, ... }:
{
boot.kernelModules = [
"hv_sock"
];
services.xserver = {
enable = true;
autorun = false;
videoDrivers = [ "fbdev" ];
};
services.xrdp = {
enable = true;
defaultWindowManager = "${config.services.xserver.displayManager.session.wrapper}";
package = pkgs.xrdp.overrideAttrs (old: rec {
configureFlags = old.configureFlags ++ [ " --enable-vsock" ];
postInstall = old.postInstall + ''
${pkgs.gnused}/bin/sed -i -e "s!use_vsock=false!use_vsock=true!g" $out/etc/xrdp/xrdp.ini
${pkgs.gnused}/bin/sed -i -e "s!security_layer=negotiate!security_layer=rdp!g" $out/etc/xrdp/xrdp.ini
${pkgs.gnused}/bin/sed -i -e "s!crypt_level=high!crypt_level=none!g" $out/etc/xrdp/xrdp.ini
${pkgs.gnused}/bin/sed -i -e "s!bitmap_compression=true!bitmap_compression=false!g" $out/etc/xrdp/xrdp.ini
${pkgs.gnused}/bin/sed -i -e "s!FuseMountName=thinclient_drives!FuseMountName=shared-drives!g" $out/etc/xrdp/sesman.ini
'';
});
};
environment.etc."X11/Xwrapper.config" = {
mode = "0644";
text = ''
allowed_users=anybody
needs_root_rights=auto
'';
};
security.pam.services.xrdp-sesman-rdp = {
text = ''
auth include system-remote-login
account include system-remote-login
password include system-remote-login
session include system-remote-login
'';
};
security.polkit = {
enable = true;
extraConfig = ''
polkit.addRule(function(action, subject) {
if ((action.id == "org.freedesktop.color-manager.create-device" ||
action.id == "org.freedesktop.color-manager.modify-profile" ||
action.id == "org.freedesktop.color-manager.delete-device" ||
action.id == "org.freedesktop.color-manager.create-profile" ||
action.id == "org.freedesktop.color-manager.modify-profile" ||
action.id == "org.freedesktop.color-manager.delete-profile") &&
subject.isInGroup("users")) {
return polkit.Result.YES;
}
});
'';
};
}
{ config, pkgs, ... }:
let
gtk-theme = pkgs.materia-theme;
icon-theme = with pkgs; [
papirus-icon-theme
paper-icon-theme
gnome3.adwaita-icon-theme
hicolor-icon-theme
];
icon-theme-bundle = pkgs.runCommand "icon-theme-bundle" {}
''
mkdir -p $out/share/icons/default
cat <<EOF >$out/share/icons/default/index.theme
[Icon Theme]
Name=Default
Comment=Default Icon Themes
Inherits=Papirus,Paper,Adwaita
EOF
'';
themeInit = ''
test ! -d ''$HOME/.config/gtk-3.0/settings.ini || rm ''$HOME/.config/gtk-3.0/settings.ini
export XDG_DATA_DIRS="$XDG_DATA_DIRS''${XDG_DATA_DIRS:+:}/run/current-system/sw/share"
export XDG_CONFIG_DIRS="$XDG_CONFIG_DIRS''${XDG_CONFIG_DIRS:+:}/etc/xdg"
export GTK2_RC_FILES="${pkgs.writeText "iconrc" ''
gtk-icon-theme-name = "Default"
gtk-cursor-theme-name = "Default"
gtk-theme-name = "Materia-compact"
''}"
export GDK_PIXBUF_MODULE_FILE="''$(echo ${pkgs.librsvg.out}/lib/gdk-pixbuf-2.0/*/loaders.cache)"
export XCURSOR_THEME="Default"
export XCURSOR_SIZE="32"
${pkgs.xorg.xrdb}/bin/xrdb -merge "${pkgs.writeText "xcursor" ''
Xcursor*theme: Default
Xcursor*size: 32
''}"
${pkgs.xorg.xsetroot}/bin/xsetroot -cursor_name left_ptr
'';
wrapperGtkGreeter = pkgs.runCommand "lightdm-gtk-greeter" {
buildInputs = [ pkgs.makeWrapper ];
} ''
makeWrapper ${pkgs.lightdm_gtk_greeter}/sbin/lightdm-gtk-greeter \
$out/greeter \
--prefix PATH : "${pkgs.glibc.bin}/bin" \
--set GDK_PIXBUF_MODULE_FILE "${pkgs.gdk_pixbuf.out}/lib/gdk-pixbuf-2.0/2.10.0/loaders.cache" \
--set GTK_PATH "${gtk-theme}:${pkgs.gtk3.out}" \
--set GTK_EXE_PREFIX "${gtk-theme}" \
--set GTK_DATA_PREFIX "${gtk-theme}" \
--set XDG_DATA_DIRS "${gtk-theme}/share:/run/current-system/sw/share" \
--set XDG_CONFIG_HOME "${gtk-theme}/share" \
--set XCURSOR_PATH "/run/current-system/sw/share/icons" \
--set XCURSOR_SIZE "48"
cat <<EOF >$out/lightdm-gtk-greeter.desktop
[Desktop Entry]
Name=LightDM Greeter
Comment=This runs the LightDM Greeter
Exec=$out/greeter
Type=Application
EOF
'';
in
{
services.xserver.displayManager.lightdm = {
background = "#0078d7";
greeter.package = wrapperGtkGreeter;
greeters.gtk = {
iconTheme = {
name = "Default";
package = icon-theme-bundle;
};
theme = {
name = "Materia-compact";
package = gtk-theme;
};
extraConfig = ''
# Appearance
user-background = false
# Fonts
font-name = Monospace 12
# Panel
clock-format = %Y-%m-%dT%H:%M:%S
indicators = ~host;~spacer;~session;~clock;~power
# Cursor
cursor-theme-name = Default
'';
};
};
programs.qt5ct.enable = true;
environment.etc."xdg/gtk-3.0/settings.ini" = {
text = ''
[Settings]
gtk-icon-theme-name = Default
gtk-cursor-theme-name = Default
gtk-theme-name = Materia-compact
'';
mode = "444";
};
environment.systemPackages = ( with pkgs; [ libsForQt5.qtstyleplugins ] )
++ [ icon-theme-bundle gtk-theme ]
++ icon-theme
;
environment.extraInit = ''
if ! test -z "${DISPLAY:-}" ; then
${themeInit}
export XDG_CONFIG_HOME=$HOME/.config
export XDG_DATA_HOME=$HOME/.local/share
export XDG_CACHE_HOME=$HOME/.cache
fi
'';
environment.pathsToLink = [ "/share" ];
}
{ config, pkgs, ... }:
{
imports = [
../per-desktop/browser.nix
../per-desktop/bspwm.nix
../per-desktop/files.nix
../per-desktop/fonts.nix
../per-desktop/ibus.nix
../per-desktop/media.nix
../per-desktop/network.nix
../per-desktop/office.nix
../per-desktop/polkit.nix