Revert "treewide/nixos: remove with lib; part 12"

This commit is contained in:
Philip Taron
2024-12-31 14:04:42 -08:00
committed by GitHub
parent 646880821e
commit b6b551fe22
48 changed files with 807 additions and 674 deletions
+5 -2
View File
@@ -4,6 +4,9 @@
pkgs,
...
}:
with lib;
let
cfg = config.services.colord;
@@ -14,12 +17,12 @@ in
options = {
services.colord = {
enable = lib.mkEnableOption "colord, the color management daemon";
enable = mkEnableOption "colord, the color management daemon";
};
};
config = lib.mkIf cfg.enable {
config = mkIf cfg.enable {
environment.systemPackages = [ pkgs.colord ];
@@ -4,16 +4,19 @@
pkgs,
...
}:
with lib;
let
xcfg = config.services.xserver;
cfg = xcfg.desktopManager.cde;
in
{
options.services.xserver.desktopManager.cde = {
enable = lib.mkEnableOption "Common Desktop Environment";
enable = mkEnableOption "Common Desktop Environment";
extraPackages = lib.mkOption {
type = with lib.types; listOf package;
extraPackages = mkOption {
type = with types; listOf package;
default = with pkgs.xorg; [
xclock
bitmap
@@ -26,7 +29,7 @@ in
xwd
xwud
];
defaultText = lib.literalExpression ''
defaultText = literalExpression ''
with pkgs.xorg; [
xclock bitmap xlsfonts xfd xrefresh xload xwininfo xdpyinfo xwd xwud
]
@@ -37,7 +40,7 @@ in
};
};
config = lib.mkIf (xcfg.enable && cfg.enable) {
config = mkIf (xcfg.enable && cfg.enable) {
environment.systemPackages = cfg.extraPackages;
services.rpcbind.enable = true;
@@ -1,4 +1,7 @@
{ config, lib, pkgs, utils, ... }:
with lib;
let
cfg = config.services.xserver.desktopManager.cinnamon;
@@ -15,16 +18,16 @@ in
{
options = {
services.cinnamon = {
apps.enable = lib.mkEnableOption "Cinnamon default applications";
apps.enable = mkEnableOption "Cinnamon default applications";
};
services.xserver.desktopManager.cinnamon = {
enable = lib.mkEnableOption "the cinnamon desktop manager";
enable = mkEnableOption "the cinnamon desktop manager";
sessionPath = lib.mkOption {
sessionPath = mkOption {
default = [];
type = lib.types.listOf lib.types.package;
example = lib.literalExpression "[ pkgs.gpaste ]";
type = types.listOf types.package;
example = literalExpression "[ pkgs.gpaste ]";
description = ''
Additional list of packages to be added to the session search path.
Useful for GSettings-conditional autostart.
@@ -33,53 +36,53 @@ in
'';
};
extraGSettingsOverrides = lib.mkOption {
extraGSettingsOverrides = mkOption {
default = "";
type = lib.types.lines;
type = types.lines;
description = "Additional gsettings overrides.";
};
extraGSettingsOverridePackages = lib.mkOption {
extraGSettingsOverridePackages = mkOption {
default = [];
type = lib.types.listOf lib.types.path;
type = types.listOf types.path;
description = "List of packages for which gsettings are overridden.";
};
};
environment.cinnamon.excludePackages = lib.mkOption {
environment.cinnamon.excludePackages = mkOption {
default = [];
example = lib.literalExpression "[ pkgs.blueman ]";
type = lib.types.listOf lib.types.package;
example = literalExpression "[ pkgs.blueman ]";
type = types.listOf types.package;
description = "Which packages cinnamon should exclude from the default environment";
};
};
config = lib.mkMerge [
(lib.mkIf cfg.enable {
config = mkMerge [
(mkIf cfg.enable {
services.displayManager.sessionPackages = [ pkgs.cinnamon-common ];
services.xserver.displayManager.lightdm.greeters.slick = {
enable = lib.mkDefault true;
enable = mkDefault true;
# Taken from mint-artwork.gschema.override
theme = lib.mkIf (notExcluded pkgs.mint-themes) {
name = lib.mkDefault "Mint-Y-Aqua";
package = lib.mkDefault pkgs.mint-themes;
theme = mkIf (notExcluded pkgs.mint-themes) {
name = mkDefault "Mint-Y-Aqua";
package = mkDefault pkgs.mint-themes;
};
iconTheme = lib.mkIf (notExcluded pkgs.mint-y-icons) {
name = lib.mkDefault "Mint-Y-Sand";
package = lib.mkDefault pkgs.mint-y-icons;
iconTheme = mkIf (notExcluded pkgs.mint-y-icons) {
name = mkDefault "Mint-Y-Sand";
package = mkDefault pkgs.mint-y-icons;
};
cursorTheme = lib.mkIf (notExcluded pkgs.mint-cursor-themes) {
name = lib.mkDefault "Bibata-Modern-Classic";
package = lib.mkDefault pkgs.mint-cursor-themes;
cursorTheme = mkIf (notExcluded pkgs.mint-cursor-themes) {
name = mkDefault "Bibata-Modern-Classic";
package = mkDefault pkgs.mint-cursor-themes;
};
};
# Have to take care of GDM + Cinnamon on Wayland users
environment.extraInit = ''
${lib.concatMapStrings (p: ''
${concatMapStrings (p: ''
if [ -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
@@ -92,30 +95,30 @@ in
'';
# Default services
services.blueman.enable = lib.mkDefault (notExcluded pkgs.blueman);
hardware.bluetooth.enable = lib.mkDefault true;
services.blueman.enable = mkDefault (notExcluded pkgs.blueman);
hardware.bluetooth.enable = mkDefault true;
security.polkit.enable = true;
services.accounts-daemon.enable = true;
services.system-config-printer.enable = (lib.mkIf config.services.printing.enable (lib.mkDefault true));
services.system-config-printer.enable = (mkIf config.services.printing.enable (mkDefault true));
services.dbus.packages = with pkgs; [
cinnamon-common
cinnamon-screensaver
nemo-with-extensions
xapp
];
services.cinnamon.apps.enable = lib.mkDefault true;
services.cinnamon.apps.enable = mkDefault true;
services.gnome.evolution-data-server.enable = true;
services.gnome.glib-networking.enable = true;
services.gnome.gnome-keyring.enable = true;
services.gvfs.enable = true;
services.power-profiles-daemon.enable = lib.mkDefault true;
services.switcherooControl.enable = lib.mkDefault true; # xapp-gpu-offload-helper
services.touchegg.enable = lib.mkDefault true;
services.power-profiles-daemon.enable = mkDefault true;
services.switcherooControl.enable = mkDefault true; # xapp-gpu-offload-helper
services.touchegg.enable = mkDefault true;
services.udisks2.enable = true;
services.upower.enable = lib.mkDefault config.powerManagement.enable;
services.libinput.enable = lib.mkDefault true;
services.upower.enable = mkDefault config.powerManagement.enable;
services.libinput.enable = mkDefault true;
services.xserver.updateDbusEnvironment = true;
networking.networkmanager.enable = lib.mkDefault true;
networking.networkmanager.enable = mkDefault true;
# Enable colord server
services.colord.enable = true;
@@ -201,9 +204,9 @@ in
pkgs.xdg-desktop-portal-gtk
];
services.orca.enable = lib.mkDefault (notExcluded pkgs.orca);
services.orca.enable = mkDefault (notExcluded pkgs.orca);
xdg.portal.configPackages = lib.mkDefault [ pkgs.cinnamon-common ];
xdg.portal.configPackages = mkDefault [ pkgs.cinnamon-common ];
# Override GSettings schemas
environment.sessionVariables.NIX_GSETTINGS_OVERRIDES_DIR = "${nixos-gsettings-overrides}/share/gsettings-schemas/nixos-gsettings-overrides/glib-2.0/schemas";
@@ -214,8 +217,8 @@ in
];
# Shell integration for VTE terminals
programs.bash.vteIntegration = lib.mkDefault true;
programs.zsh.vteIntegration = lib.mkDefault true;
programs.bash.vteIntegration = mkDefault true;
programs.zsh.vteIntegration = mkDefault true;
# Default Fonts
fonts.packages = with pkgs; [
@@ -224,10 +227,10 @@ in
];
})
(lib.mkIf serviceCfg.apps.enable {
programs.gnome-disks.enable = lib.mkDefault (notExcluded pkgs.gnome-disk-utility);
programs.gnome-terminal.enable = lib.mkDefault (notExcluded pkgs.gnome-terminal);
programs.file-roller.enable = lib.mkDefault (notExcluded pkgs.file-roller);
(mkIf serviceCfg.apps.enable {
programs.gnome-disks.enable = mkDefault (notExcluded pkgs.gnome-disk-utility);
programs.gnome-terminal.enable = mkDefault (notExcluded pkgs.gnome-terminal);
programs.file-roller.enable = mkDefault (notExcluded pkgs.file-roller);
environment.systemPackages = with pkgs; utils.removePackagesByName [
# cinnamon team apps
@@ -5,6 +5,9 @@
utils,
...
}:
with lib;
let
xcfg = config.services.xserver;
cfg = xcfg.desktopManager.deepin;
@@ -18,68 +21,68 @@ in
options = {
services.xserver.desktopManager.deepin = {
enable = lib.mkEnableOption "Deepin desktop manager";
extraGSettingsOverrides = lib.mkOption {
enable = mkEnableOption "Deepin desktop manager";
extraGSettingsOverrides = mkOption {
default = "";
type = lib.types.lines;
type = types.lines;
description = "Additional gsettings overrides.";
};
extraGSettingsOverridePackages = lib.mkOption {
extraGSettingsOverridePackages = mkOption {
default = [ ];
type = lib.types.listOf lib.types.path;
type = types.listOf types.path;
description = "List of packages for which gsettings are overridden.";
};
};
environment.deepin.excludePackages = lib.mkOption {
environment.deepin.excludePackages = mkOption {
default = [ ];
type = lib.types.listOf lib.types.package;
type = types.listOf types.package;
description = "List of default packages to exclude from the configuration";
};
};
config = lib.mkIf cfg.enable {
config = mkIf cfg.enable {
services.displayManager.sessionPackages = [ pkgs.deepin.dde-session ];
services.displayManager.defaultSession = lib.mkDefault "dde-x11";
services.displayManager.defaultSession = mkDefault "dde-x11";
# Update the DBus activation environment after launching the desktop manager.
services.xserver.displayManager.sessionCommands = ''
${lib.getBin pkgs.dbus}/bin/dbus-update-activation-environment --systemd --all
'';
hardware.bluetooth.enable = lib.mkDefault true;
hardware.bluetooth.enable = mkDefault true;
security.polkit.enable = true;
services.deepin.dde-daemon.enable = lib.mkForce true;
services.deepin.dde-api.enable = lib.mkForce true;
services.deepin.app-services.enable = lib.mkForce true;
services.deepin.dde-daemon.enable = mkForce true;
services.deepin.dde-api.enable = mkForce true;
services.deepin.app-services.enable = mkForce true;
services.colord.enable = lib.mkDefault true;
services.accounts-daemon.enable = lib.mkDefault true;
services.gvfs.enable = lib.mkDefault true;
services.gnome.glib-networking.enable = lib.mkDefault true;
services.gnome.gnome-keyring.enable = lib.mkDefault true;
services.bamf.enable = lib.mkDefault true;
services.colord.enable = mkDefault true;
services.accounts-daemon.enable = mkDefault true;
services.gvfs.enable = mkDefault true;
services.gnome.glib-networking.enable = mkDefault true;
services.gnome.gnome-keyring.enable = mkDefault true;
services.bamf.enable = mkDefault true;
services.libinput.enable = lib.mkDefault true;
services.libinput.enable = mkDefault true;
services.udisks2.enable = true;
services.upower.enable = lib.mkDefault config.powerManagement.enable;
networking.networkmanager.enable = lib.mkDefault true;
programs.dconf.enable = lib.mkDefault true;
programs.gnupg.agent.pinentryPackage = lib.mkDefault pkgs.pinentry-qt;
services.upower.enable = mkDefault config.powerManagement.enable;
networking.networkmanager.enable = mkDefault true;
programs.dconf.enable = mkDefault true;
programs.gnupg.agent.pinentryPackage = mkDefault pkgs.pinentry-qt;
fonts.packages = with pkgs; [ noto-fonts ];
xdg.mime.enable = true;
xdg.menus.enable = true;
xdg.icons.enable = true;
xdg.portal.enable = lib.mkDefault true;
xdg.portal.extraPortals = lib.mkDefault [
xdg.portal.enable = mkDefault true;
xdg.portal.extraPortals = mkDefault [
pkgs.xdg-desktop-portal-gtk
];
# https://github.com/NixOS/nixpkgs/pull/247766#issuecomment-1722839259
xdg.portal.config.deepin.default = lib.mkDefault [ "gtk" ];
xdg.portal.config.deepin.default = mkDefault [ "gtk" ];
environment.sessionVariables = {
NIX_GSETTINGS_OVERRIDES_DIR = "${nixos-gsettings-overrides}/share/gsettings-schemas/nixos-gsettings-overrides/glib-2.0/schemas";
@@ -4,6 +4,9 @@
lib,
...
}:
with lib;
let
e = pkgs.enlightenment;
@@ -20,11 +23,11 @@ in
{
meta = {
maintainers = lib.teams.enlightenment.members;
maintainers = teams.enlightenment.members;
};
imports = [
(lib.mkRenamedOptionModule
(mkRenamedOptionModule
[ "services" "xserver" "desktopManager" "e19" "enable" ]
[ "services" "xserver" "desktopManager" "enlightenment" "enable" ]
)
@@ -32,15 +35,15 @@ in
options = {
services.xserver.desktopManager.enlightenment.enable = lib.mkOption {
type = lib.types.bool;
services.xserver.desktopManager.enlightenment.enable = mkOption {
type = types.bool;
default = false;
description = "Enable the Enlightenment desktop environment.";
};
};
config = lib.mkIf cfg.enable {
config = mkIf cfg.enable {
environment.systemPackages = with pkgs; [
enlightenment.econnman
@@ -102,7 +105,7 @@ in
services.udisks2.enable = true;
services.upower.enable = config.powerManagement.enable;
services.libinput.enable = lib.mkDefault true;
services.libinput.enable = mkDefault true;
services.dbus.packages = [ e.efl ];
@@ -4,6 +4,9 @@
pkgs,
...
}:
with lib;
let
cfg = config.services.xserver.desktopManager.kodi;
in
@@ -11,19 +14,19 @@ in
{
options = {
services.xserver.desktopManager.kodi = {
enable = lib.mkOption {
type = lib.types.bool;
enable = mkOption {
type = types.bool;
default = false;
description = "Enable the kodi multimedia center.";
};
package = lib.mkPackageOption pkgs "kodi" {
package = mkPackageOption pkgs "kodi" {
example = "kodi.withPackages (p: with p; [ jellyfin pvr-iptvsimple vfs-sftp ])";
};
};
};
config = lib.mkIf cfg.enable {
config = mkIf cfg.enable {
services.xserver.desktopManager.session = [
{
name = "kodi";
@@ -4,6 +4,9 @@
pkgs,
...
}:
with lib;
let
xcfg = config.services.xserver;
@@ -13,20 +16,20 @@ in
{
meta = {
maintainers = lib.teams.lumina.members;
maintainers = teams.lumina.members;
};
options = {
services.xserver.desktopManager.lumina.enable = lib.mkOption {
type = lib.types.bool;
services.xserver.desktopManager.lumina.enable = mkOption {
type = types.bool;
default = false;
description = "Enable the Lumina desktop manager";
};
};
config = lib.mkIf cfg.enable {
config = mkIf cfg.enable {
services.displayManager.sessionPackages = [
pkgs.lumina.lumina
@@ -1,4 +1,7 @@
{ config, lib, pkgs, utils, ... }:
with lib;
let
xcfg = config.services.xserver;
cfg = xcfg.desktopManager.lxqt;
@@ -7,29 +10,29 @@ in
{
meta = {
maintainers = lib.teams.lxqt.members;
maintainers = teams.lxqt.members;
};
options = {
services.xserver.desktopManager.lxqt.enable = lib.mkOption {
type = lib.types.bool;
services.xserver.desktopManager.lxqt.enable = mkOption {
type = types.bool;
default = false;
description = "Enable the LXQt desktop manager";
};
environment.lxqt.excludePackages = lib.mkOption {
environment.lxqt.excludePackages = mkOption {
default = [];
example = lib.literalExpression "[ pkgs.lxqt.qterminal ]";
type = lib.types.listOf lib.types.package;
example = literalExpression "[ pkgs.lxqt.qterminal ]";
type = types.listOf types.package;
description = "Which LXQt packages to exclude from the default environment";
};
};
config = lib.mkIf cfg.enable {
config = mkIf cfg.enable {
services.xserver.desktopManager.session = lib.singleton {
services.xserver.desktopManager.session = singleton {
name = "lxqt";
bgSupport = true;
start = ''
@@ -59,19 +62,19 @@ in
# Link some extra directories in /run/current-system/software/share
environment.pathsToLink = [ "/share" ];
programs.gnupg.agent.pinentryPackage = lib.mkDefault pkgs.pinentry-qt;
programs.gnupg.agent.pinentryPackage = mkDefault pkgs.pinentry-qt;
# virtual file systems support for PCManFM-QT
services.gvfs.enable = true;
services.upower.enable = config.powerManagement.enable;
services.libinput.enable = lib.mkDefault true;
services.libinput.enable = mkDefault true;
xdg.portal.lxqt.enable = lib.mkDefault true;
xdg.portal.lxqt.enable = mkDefault true;
# https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1050804
xdg.portal.config.lxqt.default = lib.mkDefault [ "lxqt" "gtk" ];
xdg.portal.config.lxqt.default = mkDefault [ "lxqt" "gtk" ];
};
}
@@ -5,6 +5,9 @@
utils,
...
}:
with lib;
let
xcfg = config.services.xserver;
@@ -16,48 +19,48 @@ in
options = {
services.xserver.desktopManager.mate = {
enable = lib.mkOption {
type = lib.types.bool;
enable = mkOption {
type = types.bool;
default = false;
description = "Enable the MATE desktop environment";
};
debug = lib.mkEnableOption "mate-session debug messages";
debug = mkEnableOption "mate-session debug messages";
extraPanelApplets = lib.mkOption {
extraPanelApplets = mkOption {
default = [ ];
example = lib.literalExpression "with pkgs.mate; [ mate-applets ]";
type = lib.types.listOf lib.types.package;
example = literalExpression "with pkgs.mate; [ mate-applets ]";
type = types.listOf types.package;
description = "Extra applets to add to mate-panel.";
};
extraCajaExtensions = lib.mkOption {
extraCajaExtensions = mkOption {
default = [ ];
example = lib.literalExpression "with pkgs.mate; [ caja-extensions ]";
type = lib.types.listOf lib.types.package;
type = types.listOf types.package;
description = "Extra extensions to add to caja.";
};
enableWaylandSession = lib.mkEnableOption "MATE Wayland session";
enableWaylandSession = mkEnableOption "MATE Wayland session";
};
environment.mate.excludePackages = lib.mkOption {
environment.mate.excludePackages = mkOption {
default = [ ];
example = lib.literalExpression "[ pkgs.mate.mate-terminal pkgs.mate.pluma ]";
type = lib.types.listOf lib.types.package;
example = literalExpression "[ pkgs.mate.mate-terminal pkgs.mate.pluma ]";
type = types.listOf types.package;
description = "Which MATE packages to exclude from the default environment";
};
};
config = lib.mkMerge [
(lib.mkIf (cfg.enable || cfg.enableWaylandSession) {
config = mkMerge [
(mkIf (cfg.enable || cfg.enableWaylandSession) {
services.displayManager.sessionPackages = [
pkgs.mate.mate-session-manager
];
# Debugging
environment.sessionVariables.MATE_SESSION_DEBUG = lib.mkIf cfg.debug "1";
environment.sessionVariables.MATE_SESSION_DEBUG = mkIf cfg.debug "1";
environment.systemPackages = utils.removePackagesByName (
pkgs.mate.basePackages
@@ -80,13 +83,11 @@ in
programs.dconf.enable = true;
# Shell integration for VTE terminals
programs.bash.vteIntegration = lib.mkDefault true;
programs.zsh.vteIntegration = lib.mkDefault true;
programs.bash.vteIntegration = mkDefault true;
programs.zsh.vteIntegration = mkDefault true;
# Mate uses this for printing
programs.system-config-printer.enable = (
lib.mkIf config.services.printing.enable (lib.mkDefault true)
);
programs.system-config-printer.enable = (mkIf config.services.printing.enable (mkDefault true));
services.gnome.at-spi2-core.enable = true;
services.gnome.glib-networking.enable = true;
@@ -94,15 +95,15 @@ in
services.udev.packages = [ pkgs.mate.mate-settings-daemon ];
services.gvfs.enable = true;
services.upower.enable = config.powerManagement.enable;
services.libinput.enable = lib.mkDefault true;
services.libinput.enable = mkDefault true;
security.pam.services.mate-screensaver.unixAuth = true;
xdg.portal.configPackages = lib.mkDefault [ pkgs.mate.mate-desktop ];
xdg.portal.configPackages = mkDefault [ pkgs.mate.mate-desktop ];
environment.pathsToLink = [ "/share" ];
})
(lib.mkIf cfg.enableWaylandSession {
(mkIf cfg.enableWaylandSession {
programs.wayfire.enable = true;
programs.wayfire.plugins = [ pkgs.wayfirePlugins.firedecor ];
@@ -4,13 +4,14 @@
pkgs,
...
}:
with lib;
let
runXdgAutostart = config.services.xserver.desktopManager.runXdgAutostartIfNone;
in
{
options = {
services.xserver.desktopManager.runXdgAutostartIfNone = lib.mkOption {
type = lib.types.bool;
services.xserver.desktopManager.runXdgAutostartIfNone = mkOption {
type = types.bool;
default = false;
description = ''
Whether to run XDG autostart files for sessions without a desktop manager
@@ -26,18 +27,18 @@ in
};
};
config = lib.mkMerge [
config = mkMerge [
{
services.xserver.desktopManager.session = [
{
name = "none";
start = lib.optionalString runXdgAutostart ''
start = optionalString runXdgAutostart ''
/run/current-system/systemd/bin/systemctl --user start xdg-autostart-if-no-desktop-manager.target
'';
}
];
}
(lib.mkIf runXdgAutostart {
(mkIf runXdgAutostart {
systemd.user.targets.xdg-autostart-if-no-desktop-manager = {
description = "Run XDG autostart files";
# From `plasma-workspace`, `share/systemd/user/plasma-workspace@.target`.
@@ -1,4 +1,7 @@
{ config, lib, utils, pkgs, ... }:
with lib;
let
cfg = config.services.xserver.desktopManager.pantheon;
@@ -16,7 +19,7 @@ in
meta = {
doc = ./pantheon.md;
maintainers = lib.teams.pantheon.members;
maintainers = teams.pantheon.members;
};
options = {
@@ -24,24 +27,24 @@ in
services.pantheon = {
contractor = {
enable = lib.mkEnableOption "contractor, a desktop-wide extension service used by Pantheon";
enable = mkEnableOption "contractor, a desktop-wide extension service used by Pantheon";
};
apps.enable = lib.mkEnableOption "Pantheon default applications";
apps.enable = mkEnableOption "Pantheon default applications";
};
services.xserver.desktopManager.pantheon = {
enable = lib.mkOption {
type = lib.types.bool;
enable = mkOption {
type = types.bool;
default = false;
description = "Enable the pantheon desktop manager";
};
sessionPath = lib.mkOption {
sessionPath = mkOption {
default = [];
type = lib.types.listOf lib.types.package;
example = lib.literalExpression "[ pkgs.gpaste ]";
type = types.listOf types.package;
example = literalExpression "[ pkgs.gpaste ]";
description = ''
Additional list of packages to be added to the session search path.
Useful for GSettings-conditional autostart.
@@ -50,46 +53,46 @@ in
'';
};
extraWingpanelIndicators = lib.mkOption {
extraWingpanelIndicators = mkOption {
default = null;
type = with lib.types; nullOr (listOf package);
type = with types; nullOr (listOf package);
description = "Indicators to add to Wingpanel.";
};
extraSwitchboardPlugs = lib.mkOption {
extraSwitchboardPlugs = mkOption {
default = null;
type = with lib.types; nullOr (listOf package);
type = with types; nullOr (listOf package);
description = "Plugs to add to Switchboard.";
};
extraGSettingsOverrides = lib.mkOption {
extraGSettingsOverrides = mkOption {
default = "";
type = lib.types.lines;
type = types.lines;
description = "Additional gsettings overrides.";
};
extraGSettingsOverridePackages = lib.mkOption {
extraGSettingsOverridePackages = mkOption {
default = [];
type = lib.types.listOf lib.types.path;
type = types.listOf types.path;
description = "List of packages for which gsettings are overridden.";
};
debug = lib.mkEnableOption "gnome-session debug messages";
debug = mkEnableOption "gnome-session debug messages";
};
environment.pantheon.excludePackages = lib.mkOption {
environment.pantheon.excludePackages = mkOption {
default = [];
example = lib.literalExpression "[ pkgs.pantheon.elementary-camera ]";
type = lib.types.listOf lib.types.package;
example = literalExpression "[ pkgs.pantheon.elementary-camera ]";
type = types.listOf types.package;
description = "Which packages pantheon should exclude from the default environment";
};
};
config = lib.mkMerge [
(lib.mkIf cfg.enable {
config = mkMerge [
(mkIf cfg.enable {
services.xserver.desktopManager.pantheon.sessionPath = utils.removePackagesByName [
pkgs.pantheon.pantheon-agent-geoclue2
] config.environment.pantheon.excludePackages;
@@ -98,21 +101,21 @@ in
# Ensure lightdm is used when Pantheon is enabled
# Without it screen locking will be nonfunctional because of the use of lightlocker
warnings = lib.optional (config.services.xserver.displayManager.lightdm.enable != true)
warnings = optional (config.services.xserver.displayManager.lightdm.enable != true)
''
Using Pantheon without LightDM as a displayManager will break screenlocking from the UI.
'';
services.xserver.displayManager.lightdm.greeters.pantheon.enable = lib.mkDefault true;
services.xserver.displayManager.lightdm.greeters.pantheon.enable = mkDefault true;
# Without this, elementary LightDM greeter will pre-select non-existent `default` session
# https://github.com/elementary/greeter/issues/368
services.displayManager.defaultSession = lib.mkDefault "pantheon";
services.displayManager.defaultSession = mkDefault "pantheon";
services.xserver.displayManager.sessionCommands = ''
if test "$XDG_CURRENT_DESKTOP" = "Pantheon"; then
true
${lib.concatMapStrings (p: ''
${concatMapStrings (p: ''
if [ -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
@@ -126,38 +129,38 @@ in
'';
# Default services
hardware.bluetooth.enable = lib.mkDefault true;
hardware.bluetooth.enable = mkDefault true;
security.polkit.enable = true;
services.accounts-daemon.enable = true;
services.bamf.enable = true;
services.colord.enable = lib.mkDefault true;
services.fwupd.enable = lib.mkDefault true;
services.colord.enable = mkDefault true;
services.fwupd.enable = mkDefault true;
# TODO: Enable once #177946 is resolved
# services.packagekit.enable = mkDefault true;
services.power-profiles-daemon.enable = lib.mkDefault true;
services.touchegg.enable = lib.mkDefault true;
services.power-profiles-daemon.enable = mkDefault true;
services.touchegg.enable = mkDefault true;
services.touchegg.package = pkgs.pantheon.touchegg;
services.tumbler.enable = lib.mkDefault true;
services.system-config-printer.enable = (lib.mkIf config.services.printing.enable (lib.mkDefault true));
services.tumbler.enable = mkDefault true;
services.system-config-printer.enable = (mkIf config.services.printing.enable (mkDefault true));
services.dbus.packages = with pkgs.pantheon; [
switchboard-plug-power
elementary-default-settings # accountsservice extensions
];
services.pantheon.apps.enable = lib.mkDefault true;
services.pantheon.contractor.enable = lib.mkDefault true;
services.pantheon.apps.enable = mkDefault true;
services.pantheon.contractor.enable = mkDefault true;
services.gnome.at-spi2-core.enable = true;
services.gnome.evolution-data-server.enable = true;
services.gnome.glib-networking.enable = true;
services.gnome.gnome-keyring.enable = true;
services.gvfs.enable = true;
services.gnome.rygel.enable = lib.mkDefault true;
services.gnome.rygel.enable = mkDefault true;
services.udisks2.enable = true;
services.upower.enable = config.powerManagement.enable;
services.libinput.enable = lib.mkDefault true;
services.switcherooControl.enable = lib.mkDefault true;
services.libinput.enable = mkDefault true;
services.switcherooControl.enable = mkDefault true;
services.xserver.updateDbusEnvironment = true;
services.zeitgeist.enable = lib.mkDefault true;
services.geoclue2.enable = lib.mkDefault true;
services.zeitgeist.enable = mkDefault true;
services.geoclue2.enable = mkDefault true;
# pantheon has pantheon-agent-geoclue2
services.geoclue2.enableDemoAgent = false;
services.geoclue2.appConfig."io.elementary.desktop.agent-geoclue2" = {
@@ -170,7 +173,7 @@ in
# https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1443
pkgs.pantheon.mutter
];
services.orca.enable = lib.mkDefault (notExcluded pkgs.orca);
services.orca.enable = mkDefault (notExcluded pkgs.orca);
systemd.packages = with pkgs; [
gnome-session
pantheon.gala
@@ -178,7 +181,7 @@ in
pantheon.elementary-session-settings
];
programs.dconf.enable = true;
networking.networkmanager.enable = lib.mkDefault true;
networking.networkmanager.enable = mkDefault true;
systemd.user.targets."gnome-session-x11-services".wants = [
"org.gnome.SettingsDaemon.XSettings.service"
@@ -243,12 +246,12 @@ in
xdg-desktop-portal-pantheon
]);
xdg.portal.configPackages = lib.mkDefault [ pkgs.pantheon.elementary-default-settings ];
xdg.portal.configPackages = mkDefault [ pkgs.pantheon.elementary-default-settings ];
# Override GSettings schemas
environment.sessionVariables.NIX_GSETTINGS_OVERRIDES_DIR = "${nixos-gsettings-desktop-schemas}/share/gsettings-schemas/nixos-gsettings-overrides/glib-2.0/schemas";
environment.sessionVariables.GNOME_SESSION_DEBUG = lib.mkIf cfg.debug "1";
environment.sessionVariables.GNOME_SESSION_DEBUG = mkIf cfg.debug "1";
environment.pathsToLink = [
# FIXME: modules should link subdirs of `/share` rather than relying on this
@@ -262,8 +265,8 @@ in
programs.nm-applet.indicator = false;
# Shell integration for VTE terminals
programs.bash.vteIntegration = lib.mkDefault true;
programs.zsh.vteIntegration = lib.mkDefault true;
programs.bash.vteIntegration = mkDefault true;
programs.zsh.vteIntegration = mkDefault true;
# Default Fonts
fonts.packages = with pkgs; [
@@ -279,9 +282,9 @@ in
};
})
(lib.mkIf serviceCfg.apps.enable {
programs.evince.enable = lib.mkDefault (notExcluded pkgs.evince);
programs.file-roller.enable = lib.mkDefault (notExcluded pkgs.file-roller);
(mkIf serviceCfg.apps.enable {
programs.evince.enable = mkDefault (notExcluded pkgs.evince);
programs.file-roller.enable = mkDefault (notExcluded pkgs.file-roller);
environment.systemPackages = utils.removePackagesByName ([
pkgs.gnome-font-viewer
@@ -312,7 +315,7 @@ in
];
})
(lib.mkIf serviceCfg.contractor.enable {
(mkIf serviceCfg.contractor.enable {
environment.systemPackages = with pkgs.pantheon; [
contractor
file-roller-contract
@@ -4,20 +4,23 @@
pkgs,
...
}:
with lib;
let
cfg = config.services.xserver.desktopManager.retroarch;
in
{
options.services.xserver.desktopManager.retroarch = {
enable = lib.mkEnableOption "RetroArch";
enable = mkEnableOption "RetroArch";
package = lib.mkPackageOption pkgs "retroarch" {
package = mkPackageOption pkgs "retroarch" {
example = "retroarch-full";
};
extraArgs = lib.mkOption {
type = lib.types.listOf lib.types.str;
extraArgs = mkOption {
type = types.listOf types.str;
default = [ ];
example = [
"--verbose"
@@ -27,12 +30,12 @@ in
};
};
config = lib.mkIf cfg.enable {
config = mkIf cfg.enable {
services.xserver.desktopManager.session = [
{
name = "RetroArch";
start = ''
${cfg.package}/bin/retroarch -f ${lib.escapeShellArgs cfg.extraArgs} &
${cfg.package}/bin/retroarch -f ${escapeShellArgs cfg.extraArgs} &
waitPID=$!
'';
}
@@ -41,5 +44,5 @@ in
environment.systemPackages = [ cfg.package ];
};
meta.maintainers = with lib.maintainers; [ j0hax ];
meta.maintainers = with maintainers; [ j0hax ];
}
@@ -4,6 +4,9 @@
pkgs,
...
}:
with lib;
let
cfg = config.services.xserver.desktopManager.surf-display;
@@ -48,18 +51,18 @@ in
{
options = {
services.xserver.desktopManager.surf-display = {
enable = lib.mkEnableOption "surf-display as a kiosk browser session";
enable = mkEnableOption "surf-display as a kiosk browser session";
defaultWwwUri = lib.mkOption {
type = lib.types.str;
defaultWwwUri = mkOption {
type = types.str;
default = "${pkgs.surf-display}/share/surf-display/empty-page.html";
defaultText = lib.literalExpression ''"''${pkgs.surf-display}/share/surf-display/empty-page.html"'';
defaultText = literalExpression ''"''${pkgs.surf-display}/share/surf-display/empty-page.html"'';
example = "https://www.example.com/";
description = "Default URI to display.";
};
inactivityInterval = lib.mkOption {
type = lib.types.int;
inactivityInterval = mkOption {
type = types.int;
default = 300;
example = 0;
description = ''
@@ -72,16 +75,16 @@ in
'';
};
screensaverSettings = lib.mkOption {
type = lib.types.separatedString " ";
screensaverSettings = mkOption {
type = types.separatedString " ";
default = "";
description = ''
Screensaver settings, see `man 1 xset` for possible options.
'';
};
pointerButtonMap = lib.mkOption {
type = lib.types.str;
pointerButtonMap = mkOption {
type = types.str;
default = "1 0 0 4 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0";
description = ''
Disable right and middle pointer device click in browser sessions
@@ -90,15 +93,15 @@ in
'';
};
hideIdlePointer = lib.mkOption {
type = lib.types.str;
hideIdlePointer = mkOption {
type = types.str;
default = "yes";
example = "no";
description = "Hide idle mouse pointer.";
};
extraConfig = lib.mkOption {
type = lib.types.lines;
extraConfig = mkOption {
type = types.lines;
default = "";
example = ''
# Enforce fixed resolution for all displays (default: not set):
@@ -121,7 +124,7 @@ in
};
};
config = lib.mkIf cfg.enable {
config = mkIf cfg.enable {
services.displayManager.sessionPackages = [
pkgs.surf-display
];
@@ -1,4 +1,7 @@
{ config, lib, pkgs, utils, ... }:
with lib;
let
cfg = config.services.xserver.desktopManager.xfce;
excludePackages = config.environment.xfce.excludePackages;
@@ -6,70 +9,70 @@ let
in
{
meta = {
maintainers = lib.teams.xfce.members;
maintainers = teams.xfce.members;
};
imports = [
# added 2019-08-18
# needed to preserve some semblance of UI familarity
# with original XFCE module
(lib.mkRenamedOptionModule
(mkRenamedOptionModule
[ "services" "xserver" "desktopManager" "xfce4-14" "extraSessionCommands" ]
[ "services" "xserver" "displayManager" "sessionCommands" ])
# added 2019-11-04
# xfce4-14 module removed and promoted to xfce.
# Needed for configs that used xfce4-14 module to migrate to this one.
(lib.mkRenamedOptionModule
(mkRenamedOptionModule
[ "services" "xserver" "desktopManager" "xfce4-14" "enable" ]
[ "services" "xserver" "desktopManager" "xfce" "enable" ])
(lib.mkRenamedOptionModule
(mkRenamedOptionModule
[ "services" "xserver" "desktopManager" "xfce4-14" "noDesktop" ]
[ "services" "xserver" "desktopManager" "xfce" "noDesktop" ])
(lib.mkRenamedOptionModule
(mkRenamedOptionModule
[ "services" "xserver" "desktopManager" "xfce4-14" "enableXfwm" ]
[ "services" "xserver" "desktopManager" "xfce" "enableXfwm" ])
(lib.mkRenamedOptionModule
(mkRenamedOptionModule
[ "services" "xserver" "desktopManager" "xfce" "extraSessionCommands" ]
[ "services" "xserver" "displayManager" "sessionCommands" ])
(lib.mkRemovedOptionModule [ "services" "xserver" "desktopManager" "xfce" "screenLock" ] "")
(mkRemovedOptionModule [ "services" "xserver" "desktopManager" "xfce" "screenLock" ] "")
# added 2022-06-26
# thunar has its own module
(lib.mkRenamedOptionModule
(mkRenamedOptionModule
[ "services" "xserver" "desktopManager" "xfce" "thunarPlugins" ]
[ "programs" "thunar" "plugins" ])
];
options = {
services.xserver.desktopManager.xfce = {
enable = lib.mkOption {
type = lib.types.bool;
enable = mkOption {
type = types.bool;
default = false;
description = "Enable the Xfce desktop environment.";
};
noDesktop = lib.mkOption {
type = lib.types.bool;
noDesktop = mkOption {
type = types.bool;
default = false;
description = "Don't install XFCE desktop components (xfdesktop and panel).";
};
enableXfwm = lib.mkOption {
type = lib.types.bool;
enableXfwm = mkOption {
type = types.bool;
default = true;
description = "Enable the XFWM (default) window manager.";
};
enableScreensaver = lib.mkOption {
type = lib.types.bool;
enableScreensaver = mkOption {
type = types.bool;
default = true;
description = "Enable the XFCE screensaver.";
};
enableWaylandSession = lib.mkEnableOption "the experimental Xfce Wayland session";
enableWaylandSession = mkEnableOption "the experimental Xfce Wayland session";
waylandSessionCompositor = lib.mkOption {
waylandSessionCompositor = mkOption {
type = lib.types.str;
default = "";
example = "wayfire";
@@ -84,15 +87,15 @@ in
};
};
environment.xfce.excludePackages = lib.mkOption {
environment.xfce.excludePackages = mkOption {
default = [];
example = lib.literalExpression "[ pkgs.xfce.xfce4-volumed-pulse ]";
type = lib.types.listOf lib.types.package;
example = literalExpression "[ pkgs.xfce.xfce4-volumed-pulse ]";
type = types.listOf types.package;
description = "Which packages XFCE should exclude from the default environment";
};
};
config = lib.mkIf cfg.enable {
config = mkIf cfg.enable {
environment.systemPackages = utils.removePackagesByName (with pkgs; [
glib # for gsettings
gtk3.out # gtk-update-icon-cache
@@ -144,10 +147,10 @@ in
xfce.xfdesktop
] ++ lib.optional cfg.enableScreensaver xfce.xfce4-screensaver) excludePackages;
programs.gnupg.agent.pinentryPackage = lib.mkDefault pkgs.pinentry-gtk2;
programs.gnupg.agent.pinentryPackage = mkDefault pkgs.pinentry-gtk2;
programs.xfconf.enable = true;
programs.thunar.enable = true;
programs.labwc.enable = lib.mkDefault (cfg.enableWaylandSession && (
programs.labwc.enable = mkDefault (cfg.enableWaylandSession && (
cfg.waylandSessionCompositor == "" || lib.substring 0 5 cfg.waylandSessionCompositor == "labwc"));
environment.pathsToLink = [
@@ -170,7 +173,7 @@ in
# Copied from https://gitlab.xfce.org/xfce/xfce4-session/-/blob/xfce4-session-4.19.2/xfce-wayland.desktop.in
# to maintain consistent l10n state with X11 session file and to support the waylandSessionCompositor option.
services.displayManager.sessionPackages = lib.optionals cfg.enableWaylandSession [
services.displayManager.sessionPackages = optionals cfg.enableWaylandSession [
((pkgs.writeTextDir "share/wayland-sessions/xfce-wayland.desktop" ''
[Desktop Entry]
Version=1.0
@@ -195,16 +198,16 @@ in
services.gnome.glib-networking.enable = true;
services.gvfs.enable = true;
services.tumbler.enable = true;
services.system-config-printer.enable = (lib.mkIf config.services.printing.enable (lib.mkDefault true));
services.libinput.enable = lib.mkDefault true; # used in xfce4-settings-manager
services.colord.enable = lib.mkDefault true;
services.system-config-printer.enable = (mkIf config.services.printing.enable (mkDefault true));
services.libinput.enable = mkDefault true; # used in xfce4-settings-manager
services.colord.enable = mkDefault true;
# Enable default programs
programs.dconf.enable = true;
# Shell integration for VTE terminals
programs.bash.vteIntegration = lib.mkDefault true;
programs.zsh.vteIntegration = lib.mkDefault true;
programs.bash.vteIntegration = mkDefault true;
programs.zsh.vteIntegration = mkDefault true;
# Systemd services
systemd.packages = utils.removePackagesByName (with pkgs.xfce; [
@@ -213,6 +216,6 @@ in
security.pam.services.xfce4-screensaver.unixAuth = cfg.enableScreensaver;
xdg.portal.configPackages = lib.mkDefault [ pkgs.xfce.xfce4-session ];
xdg.portal.configPackages = mkDefault [ pkgs.xfce.xfce4-session ];
};
}
@@ -4,6 +4,9 @@
pkgs,
...
}:
with lib;
let
cfg = config.services.xserver.desktopManager.xterm;
@@ -14,18 +17,18 @@ in
{
options = {
services.xserver.desktopManager.xterm.enable = lib.mkOption {
type = lib.types.bool;
default = lib.versionOlder config.system.stateVersion "19.09" && xSessionEnabled;
defaultText = lib.literalExpression ''versionOlder config.system.stateVersion "19.09" && config.services.xserver.enable;'';
services.xserver.desktopManager.xterm.enable = mkOption {
type = types.bool;
default = versionOlder config.system.stateVersion "19.09" && xSessionEnabled;
defaultText = literalExpression ''versionOlder config.system.stateVersion "19.09" && config.services.xserver.enable;'';
description = "Enable a xterm terminal as a desktop manager.";
};
};
config = lib.mkIf cfg.enable {
config = mkIf cfg.enable {
services.xserver.desktopManager.session = lib.singleton {
services.xserver.desktopManager.session = singleton {
name = "xterm";
start = ''
${pkgs.xterm}/bin/xterm -ls &
@@ -4,6 +4,8 @@
pkgs,
...
}:
with lib;
let
dmcfg = config.services.xserver.displayManager;
ldmcfg = dmcfg.lightdm;
@@ -27,8 +29,8 @@ in
{
options = {
services.xserver.displayManager.lightdm.greeters.enso = {
enable = lib.mkOption {
type = lib.types.bool;
enable = mkOption {
type = types.bool;
default = false;
description = ''
Whether to enable enso-os-greeter as the lightdm greeter
@@ -36,17 +38,17 @@ in
};
theme = {
package = lib.mkOption {
type = lib.types.package;
package = mkOption {
type = types.package;
default = pkgs.gnome-themes-extra;
defaultText = lib.literalExpression "pkgs.gnome-themes-extra";
defaultText = literalExpression "pkgs.gnome-themes-extra";
description = ''
The package path that contains the theme given in the name option.
'';
};
name = lib.mkOption {
type = lib.types.str;
name = mkOption {
type = types.str;
default = "Adwaita";
description = ''
Name of the theme to use for the lightdm-enso-os-greeter
@@ -55,17 +57,17 @@ in
};
iconTheme = {
package = lib.mkOption {
type = lib.types.package;
package = mkOption {
type = types.package;
default = pkgs.papirus-icon-theme;
defaultText = lib.literalExpression "pkgs.papirus-icon-theme";
defaultText = literalExpression "pkgs.papirus-icon-theme";
description = ''
The package path that contains the icon theme given in the name option.
'';
};
name = lib.mkOption {
type = lib.types.str;
name = mkOption {
type = types.str;
default = "ePapirus";
description = ''
Name of the icon theme to use for the lightdm-enso-os-greeter
@@ -74,17 +76,17 @@ in
};
cursorTheme = {
package = lib.mkOption {
type = lib.types.package;
package = mkOption {
type = types.package;
default = pkgs.capitaine-cursors;
defaultText = lib.literalExpression "pkgs.capitaine-cursors";
defaultText = literalExpression "pkgs.capitaine-cursors";
description = ''
The package path that contains the cursor theme given in the name option.
'';
};
name = lib.mkOption {
type = lib.types.str;
name = mkOption {
type = types.str;
default = "capitane-cursors";
description = ''
Name of the cursor theme to use for the lightdm-enso-os-greeter
@@ -92,24 +94,24 @@ in
};
};
blur = lib.mkOption {
type = lib.types.bool;
blur = mkOption {
type = types.bool;
default = false;
description = ''
Whether or not to enable blur
'';
};
brightness = lib.mkOption {
type = lib.types.int;
brightness = mkOption {
type = types.int;
default = 7;
description = ''
Brightness
'';
};
extraConfig = lib.mkOption {
type = lib.types.lines;
extraConfig = mkOption {
type = types.lines;
default = "";
description = ''
Extra configuration that should be put in the greeter.conf
@@ -119,7 +121,7 @@ in
};
};
config = lib.mkIf (ldmcfg.enable && cfg.enable) {
config = mkIf (ldmcfg.enable && cfg.enable) {
environment.etc."lightdm/greeter.conf".source = ensoGreeterConf;
environment.systemPackages = [
@@ -129,14 +131,14 @@ in
];
services.xserver.displayManager.lightdm = {
greeter = lib.mkDefault {
greeter = mkDefault {
package = pkgs.lightdm-enso-os-greeter.xgreeters;
name = "pantheon-greeter";
};
greeters = {
gtk = {
enable = lib.mkDefault false;
enable = mkDefault false;
};
};
};
@@ -4,6 +4,9 @@
pkgs,
...
}:
with lib;
let
dmcfg = config.services.xserver.displayManager;
@@ -24,11 +27,9 @@ let
cursor-theme-name = ${cfg.cursorTheme.name}
cursor-theme-size = ${toString cfg.cursorTheme.size}
background = ${ldmcfg.background}
${lib.optionalString (cfg.clock-format != null) "clock-format = ${cfg.clock-format}"}
${lib.optionalString (
cfg.indicators != null
) "indicators = ${lib.concatStringsSep ";" cfg.indicators}"}
${lib.optionalString (xcfg.dpi != null) "xft-dpi=${toString xcfg.dpi}"}
${optionalString (cfg.clock-format != null) "clock-format = ${cfg.clock-format}"}
${optionalString (cfg.indicators != null) "indicators = ${concatStringsSep ";" cfg.indicators}"}
${optionalString (xcfg.dpi != null) "xft-dpi=${toString xcfg.dpi}"}
${cfg.extraConfig}
'';
@@ -38,8 +39,8 @@ in
services.xserver.displayManager.lightdm.greeters.gtk = {
enable = lib.mkOption {
type = lib.types.bool;
enable = mkOption {
type = types.bool;
default = true;
description = ''
Whether to enable lightdm-gtk-greeter as the lightdm greeter.
@@ -48,17 +49,17 @@ in
theme = {
package = lib.mkOption {
type = lib.types.package;
package = mkOption {
type = types.package;
default = pkgs.gnome-themes-extra;
defaultText = lib.literalExpression "pkgs.gnome-themes-extra";
defaultText = literalExpression "pkgs.gnome-themes-extra";
description = ''
The package path that contains the theme given in the name option.
'';
};
name = lib.mkOption {
type = lib.types.str;
name = mkOption {
type = types.str;
default = "Adwaita";
description = ''
Name of the theme to use for the lightdm-gtk-greeter.
@@ -69,17 +70,17 @@ in
iconTheme = {
package = lib.mkOption {
type = lib.types.package;
package = mkOption {
type = types.package;
default = pkgs.adwaita-icon-theme;
defaultText = lib.literalExpression "pkgs.adwaita-icon-theme";
defaultText = literalExpression "pkgs.adwaita-icon-theme";
description = ''
The package path that contains the icon theme given in the name option.
'';
};
name = lib.mkOption {
type = lib.types.str;
name = mkOption {
type = types.str;
default = "Adwaita";
description = ''
Name of the icon theme to use for the lightdm-gtk-greeter.
@@ -90,25 +91,25 @@ in
cursorTheme = {
package = lib.mkOption {
type = lib.types.package;
package = mkOption {
type = types.package;
default = pkgs.adwaita-icon-theme;
defaultText = lib.literalExpression "pkgs.adwaita-icon-theme";
defaultText = literalExpression "pkgs.adwaita-icon-theme";
description = ''
The package path that contains the cursor theme given in the name option.
'';
};
name = lib.mkOption {
type = lib.types.str;
name = mkOption {
type = types.str;
default = "Adwaita";
description = ''
Name of the cursor theme to use for the lightdm-gtk-greeter.
'';
};
size = lib.mkOption {
type = lib.types.int;
size = mkOption {
type = types.int;
default = 16;
description = ''
Size of the cursor theme to use for the lightdm-gtk-greeter.
@@ -116,8 +117,8 @@ in
};
};
clock-format = lib.mkOption {
type = lib.types.nullOr lib.types.str;
clock-format = mkOption {
type = types.nullOr types.str;
default = null;
example = "%F";
description = ''
@@ -128,8 +129,8 @@ in
'';
};
indicators = lib.mkOption {
type = lib.types.nullOr (lib.types.listOf lib.types.str);
indicators = mkOption {
type = types.nullOr (types.listOf types.str);
default = null;
example = [
"~host"
@@ -154,8 +155,8 @@ in
'';
};
extraConfig = lib.mkOption {
type = lib.types.lines;
extraConfig = mkOption {
type = types.lines;
default = "";
description = ''
Extra configuration that should be put in the lightdm-gtk-greeter.conf
@@ -167,9 +168,9 @@ in
};
config = lib.mkIf (ldmcfg.enable && cfg.enable) {
config = mkIf (ldmcfg.enable && cfg.enable) {
services.xserver.displayManager.lightdm.greeter = lib.mkDefault {
services.xserver.displayManager.lightdm.greeter = mkDefault {
package = pkgs.lightdm-gtk-greeter.xgreeters;
name = "lightdm-gtk-greeter";
};
@@ -4,6 +4,9 @@
pkgs,
...
}:
with lib;
let
dmcfg = config.services.xserver.displayManager;
@@ -53,8 +56,8 @@ in
services.xserver.displayManager.lightdm.greeters.mini = {
enable = lib.mkOption {
type = lib.types.bool;
enable = mkOption {
type = types.bool;
default = false;
description = ''
Whether to enable lightdm-mini-greeter as the lightdm greeter.
@@ -65,16 +68,16 @@ in
'';
};
user = lib.mkOption {
type = lib.types.str;
user = mkOption {
type = types.str;
default = "root";
description = ''
The user to login as.
'';
};
extraConfig = lib.mkOption {
type = lib.types.lines;
extraConfig = mkOption {
type = types.lines;
default = "";
description = ''
Extra configuration that should be put in the lightdm-mini-greeter.conf
@@ -86,11 +89,11 @@ in
};
config = lib.mkIf (ldmcfg.enable && cfg.enable) {
config = mkIf (ldmcfg.enable && cfg.enable) {
services.xserver.displayManager.lightdm.greeters.gtk.enable = false;
services.xserver.displayManager.lightdm.greeter = lib.mkDefault {
services.xserver.displayManager.lightdm.greeter = mkDefault {
package = pkgs.lightdm-mini-greeter.xgreeters;
name = "lightdm-mini-greeter";
};
@@ -4,6 +4,8 @@
pkgs,
...
}:
with lib;
let
dmcfg = config.services.xserver.displayManager;
ldmcfg = dmcfg.lightdm;
@@ -12,14 +14,14 @@ in
{
options = {
services.xserver.displayManager.lightdm.greeters.mobile = {
enable = lib.mkEnableOption "lightdm-mobile-greeter as the lightdm greeter";
enable = mkEnableOption "lightdm-mobile-greeter as the lightdm greeter";
};
};
config = lib.mkIf (ldmcfg.enable && cfg.enable) {
config = mkIf (ldmcfg.enable && cfg.enable) {
services.xserver.displayManager.lightdm.greeters.gtk.enable = false;
services.xserver.displayManager.lightdm.greeter = lib.mkDefault {
services.xserver.displayManager.lightdm.greeter = mkDefault {
package = pkgs.lightdm-mobile-greeter.xgreeters;
name = "lightdm-mobile-greeter";
};
@@ -4,6 +4,9 @@
pkgs,
...
}:
with lib;
let
dmcfg = config.services.xserver.displayManager;
@@ -20,8 +23,8 @@ in
services.xserver.displayManager.lightdm.greeters.pantheon = {
enable = lib.mkOption {
type = lib.types.bool;
enable = mkOption {
type = types.bool;
default = false;
description = ''
Whether to enable elementary-greeter as the lightdm greeter.
@@ -32,11 +35,11 @@ in
};
config = lib.mkIf (ldmcfg.enable && cfg.enable) {
config = mkIf (ldmcfg.enable && cfg.enable) {
services.xserver.displayManager.lightdm.greeters.gtk.enable = false;
services.xserver.displayManager.lightdm.greeter = lib.mkDefault {
services.xserver.displayManager.lightdm.greeter = mkDefault {
package = pkgs.pantheon.elementary-greeter.xgreeters;
name = "io.elementary.greeter";
};
@@ -4,6 +4,9 @@
pkgs,
...
}:
with lib;
let
ldmcfg = config.services.xserver.displayManager.lightdm;
cfg = ldmcfg.greeters.slick;
@@ -23,27 +26,27 @@ let
font-name=${cfg.font.name}
cursor-theme-name=${cfg.cursorTheme.name}
cursor-theme-size=${toString cfg.cursorTheme.size}
draw-user-backgrounds=${lib.boolToString cfg.draw-user-backgrounds}
draw-user-backgrounds=${boolToString cfg.draw-user-backgrounds}
${cfg.extraConfig}
'';
in
{
options = {
services.xserver.displayManager.lightdm.greeters.slick = {
enable = lib.mkEnableOption "lightdm-slick-greeter as the lightdm greeter";
enable = mkEnableOption "lightdm-slick-greeter as the lightdm greeter";
theme = {
package = lib.mkOption {
type = lib.types.package;
package = mkOption {
type = types.package;
default = pkgs.gnome-themes-extra;
defaultText = lib.literalExpression "pkgs.gnome-themes-extra";
defaultText = literalExpression "pkgs.gnome-themes-extra";
description = ''
The package path that contains the theme given in the name option.
'';
};
name = lib.mkOption {
type = lib.types.str;
name = mkOption {
type = types.str;
default = "Adwaita";
description = ''
Name of the theme to use for the lightdm-slick-greeter.
@@ -52,17 +55,17 @@ in
};
iconTheme = {
package = lib.mkOption {
type = lib.types.package;
package = mkOption {
type = types.package;
default = pkgs.adwaita-icon-theme;
defaultText = lib.literalExpression "pkgs.adwaita-icon-theme";
defaultText = literalExpression "pkgs.adwaita-icon-theme";
description = ''
The package path that contains the icon theme given in the name option.
'';
};
name = lib.mkOption {
type = lib.types.str;
name = mkOption {
type = types.str;
default = "Adwaita";
description = ''
Name of the icon theme to use for the lightdm-slick-greeter.
@@ -71,17 +74,17 @@ in
};
font = {
package = lib.mkOption {
type = lib.types.package;
package = mkOption {
type = types.package;
default = pkgs.ubuntu-classic;
defaultText = lib.literalExpression "pkgs.ubuntu-classic";
defaultText = literalExpression "pkgs.ubuntu-classic";
description = ''
The package path that contains the font given in the name option.
'';
};
name = lib.mkOption {
type = lib.types.str;
name = mkOption {
type = types.str;
default = "Ubuntu 11";
description = ''
Name of the font to use.
@@ -90,25 +93,25 @@ in
};
cursorTheme = {
package = lib.mkOption {
type = lib.types.package;
package = mkOption {
type = types.package;
default = pkgs.adwaita-icon-theme;
defaultText = lib.literalExpression "pkgs.adwaita-icon-theme";
defaultText = literalExpression "pkgs.adwaita-icon-theme";
description = ''
The package path that contains the cursor theme given in the name option.
'';
};
name = lib.mkOption {
type = lib.types.str;
name = mkOption {
type = types.str;
default = "Adwaita";
description = ''
Name of the cursor theme to use for the lightdm-slick-greeter.
'';
};
size = lib.mkOption {
type = lib.types.int;
size = mkOption {
type = types.int;
default = 24;
description = ''
Size of the cursor theme to use for the lightdm-slick-greeter.
@@ -116,10 +119,10 @@ in
};
};
draw-user-backgrounds = lib.mkEnableOption "draw user backgrounds";
draw-user-backgrounds = mkEnableOption "draw user backgrounds";
extraConfig = lib.mkOption {
type = lib.types.lines;
extraConfig = mkOption {
type = types.lines;
default = "";
description = ''
Extra configuration that should be put in the lightdm-slick-greeter.conf
@@ -129,10 +132,10 @@ in
};
};
config = lib.mkIf (ldmcfg.enable && cfg.enable) {
config = mkIf (ldmcfg.enable && cfg.enable) {
services.xserver.displayManager.lightdm = {
greeters.gtk.enable = false;
greeter = lib.mkDefault {
greeter = mkDefault {
package = pkgs.lightdm-slick-greeter.xgreeters;
name = "lightdm-slick-greeter";
};
@@ -4,6 +4,9 @@
pkgs,
...
}:
with lib;
let
dmcfg = config.services.xserver.displayManager;
@@ -16,8 +19,8 @@ in
services.xserver.displayManager.lightdm.greeters.tiny = {
enable = lib.mkOption {
type = lib.types.bool;
enable = mkOption {
type = types.bool;
default = false;
description = ''
Whether to enable lightdm-tiny-greeter as the lightdm greeter.
@@ -29,16 +32,16 @@ in
};
label = {
user = lib.mkOption {
type = lib.types.str;
user = mkOption {
type = types.str;
default = "Username";
description = ''
The string to represent the user_text label.
'';
};
pass = lib.mkOption {
type = lib.types.str;
pass = mkOption {
type = types.str;
default = "Password";
description = ''
The string to represent the pass_text label.
@@ -46,8 +49,8 @@ in
};
};
extraConfig = lib.mkOption {
type = lib.types.lines;
extraConfig = mkOption {
type = types.lines;
default = "";
description = ''
Section to describe style and ui.
@@ -58,7 +61,7 @@ in
};
config = lib.mkIf (ldmcfg.enable && cfg.enable) {
config = mkIf (ldmcfg.enable && cfg.enable) {
services.xserver.displayManager.lightdm.greeters.gtk.enable = false;
@@ -70,10 +73,10 @@ in
static const char *pass_text = "${cfg.label.pass}";
static const char *session = "${dmcfg.defaultSession}";
'';
config = lib.optionalString (cfg.extraConfig != "") (configHeader + cfg.extraConfig);
config = optionalString (cfg.extraConfig != "") (configHeader + cfg.extraConfig);
package = pkgs.lightdm-tiny-greeter.override { conf = config; };
in
lib.mkDefault {
mkDefault {
package = package.xgreeters;
name = "lightdm-tiny-greeter";
};
@@ -4,6 +4,9 @@
pkgs,
...
}:
with lib;
let
xcfg = config.services.xserver;
@@ -19,7 +22,7 @@ let
# lightdm runs with clearenv(), but we need a few things in the environment for X to startup
xserverWrapper = writeScript "xserver-wrapper" ''
#! ${pkgs.bash}/bin/bash
${lib.concatMapStrings (n: "export ${n}=\"${lib.getAttr n xEnv}\"\n") (lib.attrNames xEnv)}
${concatMapStrings (n: "export ${n}=\"${getAttr n xEnv}\"\n") (attrNames xEnv)}
display=$(echo "$@" | xargs -n 1 | grep -P ^:\\d\$ | head -n 1 | sed s/^://)
if [ -z "$display" ]
@@ -33,13 +36,13 @@ let
usersConf = writeText "users.conf" ''
[UserList]
minimum-uid=1000
hidden-users=${lib.concatStringsSep " " dmcfg.hiddenUsers}
hidden-users=${concatStringsSep " " dmcfg.hiddenUsers}
hidden-shells=/run/current-system/sw/bin/nologin
'';
lightdmConf = writeText "lightdm.conf" ''
[LightDM]
${lib.optionalString cfg.greeter.enable ''
${optionalString cfg.greeter.enable ''
greeter-user = ${config.users.users.lightdm.name}
greeters-directory = ${cfg.greeter.package}
''}
@@ -49,15 +52,15 @@ let
[Seat:*]
xserver-command = ${xserverWrapper}
session-wrapper = ${dmcfg.sessionData.wrapper}
${lib.optionalString cfg.greeter.enable ''
${optionalString cfg.greeter.enable ''
greeter-session = ${cfg.greeter.name}
''}
${lib.optionalString dmcfg.autoLogin.enable ''
${optionalString dmcfg.autoLogin.enable ''
autologin-user = ${dmcfg.autoLogin.user}
autologin-user-timeout = ${toString cfg.autoLogin.timeout}
autologin-session = ${sessionData.autologinSession}
''}
${lib.optionalString (xcfg.displayManager.setupCommands != "") ''
${optionalString (xcfg.displayManager.setupCommands != "") ''
display-setup-script=${pkgs.writeScript "lightdm-display-setup" ''
#!${pkgs.bash}/bin/bash
${xcfg.displayManager.setupCommands}
@@ -84,7 +87,7 @@ in
./lightdm-greeters/tiny.nix
./lightdm-greeters/slick.nix
./lightdm-greeters/mobile.nix
(lib.mkRenamedOptionModule
(mkRenamedOptionModule
[ "services" "xserver" "displayManager" "lightdm" "autoLogin" "enable" ]
[
"services"
@@ -93,7 +96,7 @@ in
"enable"
]
)
(lib.mkRenamedOptionModule
(mkRenamedOptionModule
[ "services" "xserver" "displayManager" "lightdm" "autoLogin" "user" ]
[
"services"
@@ -108,8 +111,8 @@ in
services.xserver.displayManager.lightdm = {
enable = lib.mkOption {
type = lib.types.bool;
enable = mkOption {
type = types.bool;
default = false;
description = ''
Whether to enable lightdm as the display manager.
@@ -117,24 +120,24 @@ in
};
greeter = {
enable = lib.mkOption {
type = lib.types.bool;
enable = mkOption {
type = types.bool;
default = true;
description = ''
If set to false, run lightdm in greeterless mode. This only works if autologin
is enabled and autoLogin.timeout is zero.
'';
};
package = lib.mkOption {
type = lib.types.package;
package = mkOption {
type = types.package;
description = ''
The LightDM greeter to login via. The package should be a directory
containing a .desktop file matching the name in the 'name' option.
'';
};
name = lib.mkOption {
type = lib.types.str;
name = mkOption {
type = types.str;
description = ''
The name of a .desktop file in the directory specified
in the 'package' option.
@@ -142,8 +145,8 @@ in
};
};
extraConfig = lib.mkOption {
type = lib.types.lines;
extraConfig = mkOption {
type = types.lines;
default = "";
example = ''
user-authority-in-system-dir = true
@@ -151,17 +154,17 @@ in
description = "Extra lines to append to LightDM section.";
};
background = lib.mkOption {
type = lib.types.either lib.types.path (lib.types.strMatching "^#[0-9]\{6\}$");
background = mkOption {
type = types.either types.path (types.strMatching "^#[0-9]\{6\}$");
# Manual cannot depend on packages, we are actually setting the default in config below.
defaultText = lib.literalExpression "pkgs.nixos-artwork.wallpapers.simple-dark-gray-bottom.gnomeFilePath";
defaultText = literalExpression "pkgs.nixos-artwork.wallpapers.simple-dark-gray-bottom.gnomeFilePath";
description = ''
The background image or color to use.
'';
};
extraSeatDefaults = lib.mkOption {
type = lib.types.lines;
extraSeatDefaults = mkOption {
type = types.lines;
default = "";
example = ''
greeter-show-manual-login=true
@@ -170,8 +173,8 @@ in
};
# Configuration for automatic login specific to LightDM
autoLogin.timeout = lib.mkOption {
type = lib.types.int;
autoLogin.timeout = mkOption {
type = types.int;
default = 0;
description = ''
Show the greeter for this many seconds before automatic login occurs.
@@ -181,7 +184,7 @@ in
};
};
config = lib.mkIf cfg.enable {
config = mkIf cfg.enable {
assertions = [
{
@@ -207,12 +210,12 @@ in
# Keep in sync with the defaultText value from the option definition.
services.xserver.displayManager.lightdm.background =
lib.mkDefault pkgs.nixos-artwork.wallpapers.simple-dark-gray-bottom.gnomeFilePath;
mkDefault pkgs.nixos-artwork.wallpapers.simple-dark-gray-bottom.gnomeFilePath;
# Set default session in session chooser to a specified values basically ignore session history.
# Auto-login is already covered by a config value.
services.displayManager.preStart =
lib.optionalString (!dmcfg.autoLogin.enable && dmcfg.defaultSession != null)
optionalString (!dmcfg.autoLogin.enable && dmcfg.defaultSession != null)
''
${setSessionScript}/bin/set-session ${dmcfg.defaultSession}
'';
@@ -4,10 +4,13 @@
pkgs,
...
}:
with lib;
{
# added 2019-11-11
imports = [
(lib.mkRemovedOptionModule [ "services" "xserver" "displayManager" "slim" ] ''
(mkRemovedOptionModule [ "services" "xserver" "displayManager" "slim" ] ''
The SLIM project is abandoned and their last release was in 2013.
Because of this it poses a security risk to your system.
Other issues include it not fully supporting systemd and logind sessions.
@@ -4,6 +4,9 @@
pkgs,
...
}:
with lib;
let
cfg = config.services.xserver.displayManager.startx;
@@ -16,8 +19,8 @@ in
options = {
services.xserver.displayManager.startx = {
enable = lib.mkOption {
type = lib.types.bool;
enable = mkOption {
type = types.bool;
default = false;
description = ''
Whether to enable the dummy "startx" pseudo-display manager,
@@ -33,7 +36,7 @@ in
###### implementation
config = lib.mkIf cfg.enable {
config = mkIf cfg.enable {
services.xserver = {
exportConfiguration = true;
};
@@ -43,7 +46,7 @@ in
#
# To send log to Xorg's default log location ($XDG_DATA_HOME/xorg/), we do
# not specify a log file when running X
services.xserver.logFile = lib.mkDefault null;
services.xserver.logFile = mkDefault null;
# Implement xserverArgs via xinit's system-wide xserverrc
environment.etc."X11/xinit/xserverrc".source = pkgs.writeShellScript "xserverrc" ''
@@ -1,4 +1,7 @@
{ config, lib, pkgs, ... }:
with lib;
let
cfg = config.services.xserver.displayManager.xpra;
dmcfg = config.services.xserver.displayManager;
@@ -10,46 +13,46 @@ in
options = {
services.xserver.displayManager.xpra = {
enable = lib.mkOption {
type = lib.types.bool;
enable = mkOption {
type = types.bool;
default = false;
description = "Whether to enable xpra as display manager.";
};
bindTcp = lib.mkOption {
bindTcp = mkOption {
default = "127.0.0.1:10000";
example = "0.0.0.0:10000";
type = lib.types.nullOr lib.types.str;
type = types.nullOr types.str;
description = "Bind xpra to TCP";
};
desktop = lib.mkOption {
type = lib.types.nullOr lib.types.str;
desktop = mkOption {
type = types.nullOr types.str;
default = null;
example = "gnome-shell";
description = "Start a desktop environment instead of seamless mode";
};
auth = lib.mkOption {
type = lib.types.str;
auth = mkOption {
type = types.str;
default = "pam";
example = "password:value=mysecret";
description = "Authentication to use when connecting to xpra";
};
pulseaudio = lib.mkEnableOption "pulseaudio audio streaming";
pulseaudio = mkEnableOption "pulseaudio audio streaming";
extraOptions = lib.mkOption {
extraOptions = mkOption {
description = "Extra xpra options";
default = [];
type = lib.types.listOf lib.types.str;
type = types.listOf types.str;
};
};
};
###### implementation
config = lib.mkIf cfg.enable {
config = mkIf cfg.enable {
services.xserver.videoDrivers = ["dummy"];
services.xserver.monitorSection = ''
@@ -224,7 +227,7 @@ in
'';
services.displayManager.execCmd = ''
${lib.optionalString (cfg.pulseaudio)
${optionalString (cfg.pulseaudio)
"export PULSE_COOKIE=/run/pulse/.config/pulse/cookie"}
exec ${pkgs.xpra}/bin/xpra ${if cfg.desktop == null then "start" else "start-desktop --start=${cfg.desktop}"} \
--daemon=off \
@@ -236,20 +239,20 @@ in
--speaker=yes \
--mdns=no \
--pulseaudio=no \
${lib.optionalString (cfg.pulseaudio) "--sound-source=pulse"} \
${optionalString (cfg.pulseaudio) "--sound-source=pulse"} \
--socket-dirs=/run/xpra \
--xvfb="xpra_Xdummy ${lib.concatStringsSep " " dmcfg.xserverArgs}" \
${lib.optionalString (cfg.bindTcp != null) "--bind-tcp=${cfg.bindTcp}"} \
--xvfb="xpra_Xdummy ${concatStringsSep " " dmcfg.xserverArgs}" \
${optionalString (cfg.bindTcp != null) "--bind-tcp=${cfg.bindTcp}"} \
--auth=${cfg.auth} \
${lib.concatStringsSep " " cfg.extraOptions}
${concatStringsSep " " cfg.extraOptions}
'';
services.xserver.terminateOnReset = false;
environment.systemPackages = [pkgs.xpra];
services.pulseaudio.enable = lib.mkDefault cfg.pulseaudio;
services.pulseaudio.systemWide = lib.mkDefault cfg.pulseaudio;
services.pulseaudio.enable = mkDefault cfg.pulseaudio;
services.pulseaudio.systemWide = mkDefault cfg.pulseaudio;
};
}
+21 -18
View File
@@ -4,26 +4,29 @@
pkgs,
...
}:
with lib;
let
layouts = config.services.xserver.xkb.extraLayouts;
layoutOpts = {
options = {
description = lib.mkOption {
type = lib.types.str;
description = mkOption {
type = types.str;
description = "A short description of the layout.";
};
languages = lib.mkOption {
type = lib.types.listOf lib.types.str;
languages = mkOption {
type = types.listOf types.str;
description = ''
A list of languages provided by the layout.
(Use ISO 639-2 codes, for example: "eng" for english)
'';
};
compatFile = lib.mkOption {
type = lib.types.nullOr lib.types.path;
compatFile = mkOption {
type = types.nullOr types.path;
default = null;
description = ''
The path to the xkb compat file.
@@ -33,8 +36,8 @@ let
'';
};
geometryFile = lib.mkOption {
type = lib.types.nullOr lib.types.path;
geometryFile = mkOption {
type = types.nullOr types.path;
default = null;
description = ''
The path to the xkb geometry file.
@@ -44,8 +47,8 @@ let
'';
};
keycodesFile = lib.mkOption {
type = lib.types.nullOr lib.types.path;
keycodesFile = mkOption {
type = types.nullOr types.path;
default = null;
description = ''
The path to the xkb keycodes file.
@@ -55,8 +58,8 @@ let
'';
};
symbolsFile = lib.mkOption {
type = lib.types.nullOr lib.types.path;
symbolsFile = mkOption {
type = types.nullOr types.path;
default = null;
description = ''
The path to the xkb symbols file.
@@ -66,8 +69,8 @@ let
'';
};
typesFile = lib.mkOption {
type = lib.types.nullOr lib.types.path;
typesFile = mkOption {
type = types.nullOr types.path;
default = null;
description = ''
The path to the xkb types file.
@@ -108,10 +111,10 @@ in
###### interface
options.services.xserver.xkb = {
extraLayouts = lib.mkOption {
type = lib.types.attrsOf (lib.types.submodule layoutOpts);
extraLayouts = mkOption {
type = types.attrsOf (types.submodule layoutOpts);
default = { };
example = lib.literalExpression ''
example = literalExpression ''
{
mine = {
description = "My custom xkb layout.";
@@ -133,7 +136,7 @@ in
###### implementation
config = lib.mkIf (layouts != { }) {
config = mkIf (layouts != { }) {
environment.sessionVariables = {
# runtime override supported by multiple libraries e. g. libxkbcommon
+10 -9
View File
@@ -4,38 +4,39 @@
pkgs,
...
}:
with lib;
let
cfg = config.services.fractalart;
in
{
options.services.fractalart = {
enable = lib.mkOption {
type = lib.types.bool;
enable = mkOption {
type = types.bool;
default = false;
example = true;
description = "Enable FractalArt for generating colorful wallpapers on login";
};
width = lib.mkOption {
type = lib.types.nullOr lib.types.int;
width = mkOption {
type = types.nullOr types.int;
default = null;
example = 1920;
description = "Screen width";
};
height = lib.mkOption {
type = lib.types.nullOr lib.types.int;
height = mkOption {
type = types.nullOr types.int;
default = null;
example = 1080;
description = "Screen height";
};
};
config = lib.mkIf cfg.enable {
config = mkIf cfg.enable {
environment.systemPackages = [ pkgs.haskellPackages.FractalArt ];
services.xserver.displayManager.sessionCommands =
"${pkgs.haskellPackages.FractalArt}/bin/FractalArt --no-bg -f .background-image"
+ lib.optionalString (cfg.width != null) " -w ${toString cfg.width}"
+ lib.optionalString (cfg.height != null) " -h ${toString cfg.height}";
+ optionalString (cfg.width != null) " -w ${toString cfg.width}"
+ optionalString (cfg.height != null) " -h ${toString cfg.height}";
};
}
+8 -5
View File
@@ -4,6 +4,9 @@
pkgs,
...
}:
with lib;
let
cfg = config.services.xserver.cmt;
@@ -15,13 +18,13 @@ in
options = {
services.xserver.cmt = {
enable = lib.mkOption {
type = lib.types.bool;
enable = mkOption {
type = types.bool;
default = false;
description = "Enable chrome multitouch input (cmt). Touchpad drivers that are configured for chromebooks.";
};
models = lib.mkOption {
type = lib.types.enum [
models = mkOption {
type = types.enum [
"atlas"
"banjo"
"candy"
@@ -80,7 +83,7 @@ in
}; # closes services
}; # closes options
config = lib.mkIf cfg.enable {
config = mkIf cfg.enable {
services.xserver.modules = [ pkgs.xf86_input_cmt ];
@@ -4,6 +4,9 @@
pkgs,
...
}:
with lib;
let
cfg = config.services.xserver.digimend;
@@ -18,13 +21,13 @@ in
services.xserver.digimend = {
enable = lib.mkEnableOption "the digimend drivers for Huion/XP-Pen/etc. tablets";
enable = mkEnableOption "the digimend drivers for Huion/XP-Pen/etc. tablets";
};
};
config = lib.mkIf cfg.enable {
config = mkIf cfg.enable {
# digimend drivers use xsetwacom and wacom X11 drivers
services.xserver.wacom.enable = true;
@@ -5,6 +5,9 @@
pkgs,
...
}:
with lib;
let
cfg = config.services.xserver.synaptics;
opt = options.services.xserver.synaptics;
@@ -32,14 +35,14 @@ in
services.xserver.synaptics = {
enable = lib.mkOption {
type = lib.types.bool;
enable = mkOption {
type = types.bool;
default = false;
description = "Whether to enable touchpad support. Deprecated: Consider services.libinput.enable.";
};
dev = lib.mkOption {
type = lib.types.nullOr lib.types.str;
dev = mkOption {
type = types.nullOr types.str;
default = null;
example = "/dev/input/event0";
description = ''
@@ -48,73 +51,73 @@ in
'';
};
accelFactor = lib.mkOption {
type = lib.types.nullOr lib.types.str;
accelFactor = mkOption {
type = types.nullOr types.str;
default = "0.001";
description = "Cursor acceleration (how fast speed increases from minSpeed to maxSpeed).";
};
minSpeed = lib.mkOption {
type = lib.types.nullOr lib.types.str;
minSpeed = mkOption {
type = types.nullOr types.str;
default = "0.6";
description = "Cursor speed factor for precision finger motion.";
};
maxSpeed = lib.mkOption {
type = lib.types.nullOr lib.types.str;
maxSpeed = mkOption {
type = types.nullOr types.str;
default = "1.0";
description = "Cursor speed factor for highest-speed finger motion.";
};
scrollDelta = lib.mkOption {
type = lib.types.nullOr lib.types.int;
scrollDelta = mkOption {
type = types.nullOr types.int;
default = null;
example = 75;
description = "Move distance of the finger for a scroll event.";
};
twoFingerScroll = lib.mkOption {
type = lib.types.bool;
twoFingerScroll = mkOption {
type = types.bool;
default = false;
description = "Whether to enable two-finger drag-scrolling. Overridden by horizTwoFingerScroll and vertTwoFingerScroll.";
};
horizTwoFingerScroll = lib.mkOption {
type = lib.types.bool;
horizTwoFingerScroll = mkOption {
type = types.bool;
default = cfg.twoFingerScroll;
defaultText = lib.literalExpression "config.${opt.twoFingerScroll}";
defaultText = literalExpression "config.${opt.twoFingerScroll}";
description = "Whether to enable horizontal two-finger drag-scrolling.";
};
vertTwoFingerScroll = lib.mkOption {
type = lib.types.bool;
vertTwoFingerScroll = mkOption {
type = types.bool;
default = cfg.twoFingerScroll;
defaultText = lib.literalExpression "config.${opt.twoFingerScroll}";
defaultText = literalExpression "config.${opt.twoFingerScroll}";
description = "Whether to enable vertical two-finger drag-scrolling.";
};
horizEdgeScroll = lib.mkOption {
type = lib.types.bool;
horizEdgeScroll = mkOption {
type = types.bool;
default = !cfg.horizTwoFingerScroll;
defaultText = lib.literalExpression "! config.${opt.horizTwoFingerScroll}";
defaultText = literalExpression "! config.${opt.horizTwoFingerScroll}";
description = "Whether to enable horizontal edge drag-scrolling.";
};
vertEdgeScroll = lib.mkOption {
type = lib.types.bool;
vertEdgeScroll = mkOption {
type = types.bool;
default = !cfg.vertTwoFingerScroll;
defaultText = lib.literalExpression "! config.${opt.vertTwoFingerScroll}";
defaultText = literalExpression "! config.${opt.vertTwoFingerScroll}";
description = "Whether to enable vertical edge drag-scrolling.";
};
tapButtons = lib.mkOption {
type = lib.types.bool;
tapButtons = mkOption {
type = types.bool;
default = true;
description = "Whether to enable tap buttons.";
};
buttonsMap = lib.mkOption {
type = lib.types.listOf lib.types.int;
buttonsMap = mkOption {
type = types.listOf types.int;
default = [
1
2
@@ -129,8 +132,8 @@ in
apply = map toString;
};
fingersMap = lib.mkOption {
type = lib.types.listOf lib.types.int;
fingersMap = mkOption {
type = types.listOf types.int;
default = [
1
2
@@ -145,34 +148,34 @@ in
apply = map toString;
};
palmDetect = lib.mkOption {
type = lib.types.bool;
palmDetect = mkOption {
type = types.bool;
default = false;
description = "Whether to enable palm detection (hardware support required)";
};
palmMinWidth = lib.mkOption {
type = lib.types.nullOr lib.types.int;
palmMinWidth = mkOption {
type = types.nullOr types.int;
default = null;
example = 5;
description = "Minimum finger width at which touch is considered a palm";
};
palmMinZ = lib.mkOption {
type = lib.types.nullOr lib.types.int;
palmMinZ = mkOption {
type = types.nullOr types.int;
default = null;
example = 20;
description = "Minimum finger pressure at which touch is considered a palm";
};
horizontalScroll = lib.mkOption {
type = lib.types.bool;
horizontalScroll = mkOption {
type = types.bool;
default = true;
description = "Whether to enable horizontal scrolling (on touchpad)";
};
additionalOptions = lib.mkOption {
type = lib.types.str;
additionalOptions = mkOption {
type = types.str;
default = "";
example = ''
Option "RTCornerButton" "2"
@@ -187,7 +190,7 @@ in
};
config = lib.mkIf cfg.enable {
config = mkIf cfg.enable {
services.xserver.modules = [ pkg.out ];
@@ -200,12 +203,12 @@ in
Section "InputClass"
Identifier "synaptics touchpad catchall"
MatchIsTouchpad "on"
${lib.optionalString (cfg.dev != null) ''MatchDevicePath "${cfg.dev}"''}
${optionalString (cfg.dev != null) ''MatchDevicePath "${cfg.dev}"''}
Driver "synaptics"
${lib.optionalString (cfg.minSpeed != null) ''Option "MinSpeed" "${cfg.minSpeed}"''}
${lib.optionalString (cfg.maxSpeed != null) ''Option "MaxSpeed" "${cfg.maxSpeed}"''}
${lib.optionalString (cfg.accelFactor != null) ''Option "AccelFactor" "${cfg.accelFactor}"''}
${lib.optionalString cfg.tapButtons tapConfig}
${optionalString (cfg.minSpeed != null) ''Option "MinSpeed" "${cfg.minSpeed}"''}
${optionalString (cfg.maxSpeed != null) ''Option "MaxSpeed" "${cfg.maxSpeed}"''}
${optionalString (cfg.accelFactor != null) ''Option "AccelFactor" "${cfg.accelFactor}"''}
${optionalString cfg.tapButtons tapConfig}
Option "ClickFinger1" "${builtins.elemAt cfg.buttonsMap 0}"
Option "ClickFinger2" "${builtins.elemAt cfg.buttonsMap 1}"
Option "ClickFinger3" "${builtins.elemAt cfg.buttonsMap 2}"
@@ -213,19 +216,19 @@ in
Option "HorizTwoFingerScroll" "${if cfg.horizTwoFingerScroll then "1" else "0"}"
Option "VertEdgeScroll" "${if cfg.vertEdgeScroll then "1" else "0"}"
Option "HorizEdgeScroll" "${if cfg.horizEdgeScroll then "1" else "0"}"
${lib.optionalString cfg.palmDetect ''Option "PalmDetect" "1"''}
${lib.optionalString (
${optionalString cfg.palmDetect ''Option "PalmDetect" "1"''}
${optionalString (
cfg.palmMinWidth != null
) ''Option "PalmMinWidth" "${toString cfg.palmMinWidth}"''}
${lib.optionalString (cfg.palmMinZ != null) ''Option "PalmMinZ" "${toString cfg.palmMinZ}"''}
${lib.optionalString (
${optionalString (cfg.palmMinZ != null) ''Option "PalmMinZ" "${toString cfg.palmMinZ}"''}
${optionalString (
cfg.scrollDelta != null
) ''Option "VertScrollDelta" "${toString cfg.scrollDelta}"''}
${
if !cfg.horizontalScroll then
''Option "HorizScrollDelta" "0"''
else
(lib.optionalString (
(optionalString (
cfg.scrollDelta != null
) ''Option "HorizScrollDelta" "${toString cfg.scrollDelta}"'')
}
@@ -4,6 +4,9 @@
pkgs,
...
}:
with lib;
let
cfg = config.services.xserver.wacom;
@@ -16,8 +19,8 @@ in
services.xserver.wacom = {
enable = lib.mkOption {
type = lib.types.bool;
enable = mkOption {
type = types.bool;
default = false;
description = ''
Whether to enable the Wacom touchscreen/digitizer/tablet.
@@ -34,7 +37,7 @@ in
};
config = lib.mkIf cfg.enable {
config = mkIf cfg.enable {
environment.systemPackages = [ pkgs.xf86_input_wacom ]; # provides xsetwacom
+10 -9
View File
@@ -4,16 +4,17 @@
pkgs,
...
}:
with lib;
let
cfg = config.services.xserver.imwheel;
in
{
options = {
services.xserver.imwheel = {
enable = lib.mkEnableOption "IMWheel service";
enable = mkEnableOption "IMWheel service";
extraOptions = lib.mkOption {
type = lib.types.listOf lib.types.str;
extraOptions = mkOption {
type = types.listOf types.str;
default = [ "--buttons=45" ];
example = [ "--debug" ];
description = ''
@@ -22,10 +23,10 @@ in
'';
};
rules = lib.mkOption {
type = lib.types.attrsOf lib.types.str;
rules = mkOption {
type = types.attrsOf types.str;
default = { };
example = lib.literalExpression ''
example = literalExpression ''
{
".*" = '''
None, Up, Button4, 8
@@ -48,11 +49,11 @@ in
};
};
config = lib.mkIf cfg.enable {
config = mkIf cfg.enable {
environment.systemPackages = [ pkgs.imwheel ];
environment.etc."X11/imwheel/imwheelrc".source = pkgs.writeText "imwheelrc" (
lib.concatStringsSep "\n\n" (lib.mapAttrsToList (rule: conf: "\"${rule}\"\n${conf}") cfg.rules)
concatStringsSep "\n\n" (mapAttrsToList (rule: conf: "\"${rule}\"\n${conf}") cfg.rules)
);
systemd.user.services.imwheel = {
@@ -62,7 +63,7 @@ in
serviceConfig = {
ExecStart =
"${pkgs.imwheel}/bin/imwheel "
+ lib.escapeShellArgs (
+ escapeShellArgs (
[
"--detach"
"--kill"
+67 -64
View File
@@ -5,6 +5,9 @@
pkgs,
...
}:
with lib;
let
cfg = config.services.picom;
@@ -12,46 +15,46 @@ let
pairOf =
x:
with lib.types;
with types;
addCheck (listOf x) (y: length y == 2) // { description = "pair of ${x.description}"; };
mkDefaultAttrs = lib.mapAttrs (n: v: lib.mkDefault v);
mkDefaultAttrs = mapAttrs (n: v: mkDefault v);
# Basically a tinkered lib.generators.mkKeyValueDefault
# It either serializes a top-level definition "key: { values };"
# or an expression "key = { values };"
mkAttrsString =
top:
lib.mapAttrsToList (
mapAttrsToList (
k: v:
let
sep = if (top && lib.isAttrs v) then ":" else "=";
sep = if (top && isAttrs v) then ":" else "=";
in
"${lib.escape [ sep ] k}${sep}${mkValueString v};"
"${escape [ sep ] k}${sep}${mkValueString v};"
);
# This serializes a Nix expression to the libconfig format.
mkValueString =
v:
if lib.types.bool.check v then
lib.boolToString v
else if lib.types.int.check v then
if types.bool.check v then
boolToString v
else if types.int.check v then
toString v
else if lib.types.float.check v then
else if types.float.check v then
toString v
else if lib.types.str.check v then
"\"${lib.escape [ "\"" ] v}\""
else if types.str.check v then
"\"${escape [ "\"" ] v}\""
else if builtins.isList v then
"[ ${lib.concatMapStringsSep " , " mkValueString v} ]"
else if lib.types.attrs.check v then
"{ ${lib.concatStringsSep " " (mkAttrsString false v)} }"
"[ ${concatMapStringsSep " , " mkValueString v} ]"
else if types.attrs.check v then
"{ ${concatStringsSep " " (mkAttrsString false v)} }"
else
throw ''
invalid expression used in option services.picom.settings:
${v}
'';
toConf = attrs: lib.concatStringsSep "\n" (mkAttrsString true cfg.settings);
toConf = attrs: concatStringsSep "\n" (mkAttrsString true cfg.settings);
configFile = pkgs.writeText "picom.conf" (toConf cfg.settings);
@@ -59,38 +62,38 @@ in
{
imports = [
(lib.mkAliasOptionModuleMD [ "services" "compton" ] [ "services" "picom" ])
(lib.mkRemovedOptionModule [ "services" "picom" "refreshRate" ] ''
(mkAliasOptionModuleMD [ "services" "compton" ] [ "services" "picom" ])
(mkRemovedOptionModule [ "services" "picom" "refreshRate" ] ''
This option corresponds to `refresh-rate`, which has been unused
since picom v6 and was subsequently removed by upstream.
See https://github.com/yshui/picom/commit/bcbc410
'')
(lib.mkRemovedOptionModule [ "services" "picom" "experimentalBackends" ] ''
(mkRemovedOptionModule [ "services" "picom" "experimentalBackends" ] ''
This option was removed by upstream since picom v10.
'')
];
options.services.picom = {
enable = lib.mkOption {
type = lib.types.bool;
enable = mkOption {
type = types.bool;
default = false;
description = ''
Whether or not to enable Picom as the X.org composite manager.
'';
};
package = lib.mkPackageOption pkgs "picom" { };
package = mkPackageOption pkgs "picom" { };
fade = lib.mkOption {
type = lib.types.bool;
fade = mkOption {
type = types.bool;
default = false;
description = ''
Fade windows in and out.
'';
};
fadeDelta = lib.mkOption {
type = lib.types.ints.positive;
fadeDelta = mkOption {
type = types.ints.positive;
default = 10;
example = 5;
description = ''
@@ -98,8 +101,8 @@ in
'';
};
fadeSteps = lib.mkOption {
type = pairOf (lib.types.numbers.between 0.01 1);
fadeSteps = mkOption {
type = pairOf (types.numbers.between 0.01 1);
default = [
0.028
0.03
@@ -113,8 +116,8 @@ in
'';
};
fadeExclude = lib.mkOption {
type = lib.types.listOf lib.types.str;
fadeExclude = mkOption {
type = types.listOf types.str;
default = [ ];
example = [
"window_type *= 'menu'"
@@ -127,16 +130,16 @@ in
'';
};
shadow = lib.mkOption {
type = lib.types.bool;
shadow = mkOption {
type = types.bool;
default = false;
description = ''
Draw window shadows.
'';
};
shadowOffsets = lib.mkOption {
type = pairOf lib.types.int;
shadowOffsets = mkOption {
type = pairOf types.int;
default = [
(-15)
(-15)
@@ -150,8 +153,8 @@ in
'';
};
shadowOpacity = lib.mkOption {
type = lib.types.numbers.between 0 1;
shadowOpacity = mkOption {
type = types.numbers.between 0 1;
default = 0.75;
example = 0.8;
description = ''
@@ -159,8 +162,8 @@ in
'';
};
shadowExclude = lib.mkOption {
type = lib.types.listOf lib.types.str;
shadowExclude = mkOption {
type = types.listOf types.str;
default = [ ];
example = [
"window_type *= 'menu'"
@@ -173,8 +176,8 @@ in
'';
};
activeOpacity = lib.mkOption {
type = lib.types.numbers.between 0 1;
activeOpacity = mkOption {
type = types.numbers.between 0 1;
default = 1.0;
example = 0.8;
description = ''
@@ -182,8 +185,8 @@ in
'';
};
inactiveOpacity = lib.mkOption {
type = lib.types.numbers.between 0.1 1;
inactiveOpacity = mkOption {
type = types.numbers.between 0.1 1;
default = 1.0;
example = 0.8;
description = ''
@@ -191,8 +194,8 @@ in
'';
};
menuOpacity = lib.mkOption {
type = lib.types.numbers.between 0 1;
menuOpacity = mkOption {
type = types.numbers.between 0 1;
default = 1.0;
example = 0.8;
description = ''
@@ -200,8 +203,8 @@ in
'';
};
wintypes = lib.mkOption {
type = lib.types.attrs;
wintypes = mkOption {
type = types.attrs;
default = {
popup_menu = {
opacity = cfg.menuOpacity;
@@ -210,7 +213,7 @@ in
opacity = cfg.menuOpacity;
};
};
defaultText = lib.literalExpression ''
defaultText = literalExpression ''
{
popup_menu = { opacity = config.${opt.menuOpacity}; };
dropdown_menu = { opacity = config.${opt.menuOpacity}; };
@@ -222,8 +225,8 @@ in
'';
};
opacityRules = lib.mkOption {
type = lib.types.listOf lib.types.str;
opacityRules = mkOption {
type = types.listOf types.str;
default = [ ];
example = [
"95:class_g = 'URxvt' && !_NET_WM_STATE@:32a"
@@ -234,8 +237,8 @@ in
'';
};
backend = lib.mkOption {
type = lib.types.enum [
backend = mkOption {
type = types.enum [
"egl"
"glx"
"xrender"
@@ -247,9 +250,9 @@ in
'';
};
vSync = lib.mkOption {
vSync = mkOption {
type =
with lib.types;
with types;
either bool (enum [
"none"
"drm"
@@ -265,9 +268,9 @@ in
res = x != "none";
msg =
"The type of services.picom.vSync has changed to bool:"
+ " interpreting ${x} as ${lib.boolToString res}";
+ " interpreting ${x} as ${boolToString res}";
in
if lib.isBool x then x else lib.warn msg res;
if isBool x then x else warn msg res;
description = ''
Enable vertical synchronization. Chooses the best method
@@ -277,7 +280,7 @@ in
};
settings =
with lib.types;
with types;
let
scalar =
oneOf [
@@ -310,10 +313,10 @@ in
};
in
lib.mkOption {
mkOption {
type = topLevel;
default = { };
example = lib.literalExpression ''
example = literalExpression ''
blur =
{ method = "gaussian";
size = 10;
@@ -328,19 +331,19 @@ in
};
};
config = lib.mkIf cfg.enable {
config = mkIf cfg.enable {
services.picom.settings = mkDefaultAttrs {
# fading
fading = cfg.fade;
fade-delta = cfg.fadeDelta;
fade-in-step = lib.elemAt cfg.fadeSteps 0;
fade-out-step = lib.elemAt cfg.fadeSteps 1;
fade-in-step = elemAt cfg.fadeSteps 0;
fade-out-step = elemAt cfg.fadeSteps 1;
fade-exclude = cfg.fadeExclude;
# shadows
shadow = cfg.shadow;
shadow-offset-x = lib.elemAt cfg.shadowOffsets 0;
shadow-offset-y = lib.elemAt cfg.shadowOffsets 1;
shadow-offset-x = elemAt cfg.shadowOffsets 0;
shadow-offset-y = elemAt cfg.shadowOffsets 1;
shadow-opacity = cfg.shadowOpacity;
shadow-exclude = cfg.shadowExclude;
@@ -363,12 +366,12 @@ in
partOf = [ "graphical-session.target" ];
# Temporarily fixes corrupt colours with Mesa 18
environment = lib.mkIf (cfg.backend == "glx") {
environment = mkIf (cfg.backend == "glx") {
allow_rgb10_configs = "false";
};
serviceConfig = {
ExecStart = "${lib.getExe cfg.package} --config ${configFile}";
ExecStart = "${getExe cfg.package} --config ${configFile}";
RestartSec = 3;
Restart = "always";
};
+24 -21
View File
@@ -4,6 +4,9 @@
pkgs,
...
}:
with lib;
let
cfg = config.services.redshift;
@@ -13,32 +16,32 @@ in
{
imports = [
(lib.mkChangedOptionModule [ "services" "redshift" "latitude" ] [ "location" "latitude" ] (
(mkChangedOptionModule [ "services" "redshift" "latitude" ] [ "location" "latitude" ] (
config:
let
value = lib.getAttrFromPath [ "services" "redshift" "latitude" ] config;
value = getAttrFromPath [ "services" "redshift" "latitude" ] config;
in
if value == null then
throw "services.redshift.latitude is set to null, you can remove this"
else
builtins.fromJSON value
))
(lib.mkChangedOptionModule [ "services" "redshift" "longitude" ] [ "location" "longitude" ] (
(mkChangedOptionModule [ "services" "redshift" "longitude" ] [ "location" "longitude" ] (
config:
let
value = lib.getAttrFromPath [ "services" "redshift" "longitude" ] config;
value = getAttrFromPath [ "services" "redshift" "longitude" ] config;
in
if value == null then
throw "services.redshift.longitude is set to null, you can remove this"
else
builtins.fromJSON value
))
(lib.mkRenamedOptionModule [ "services" "redshift" "provider" ] [ "location" "provider" ])
(mkRenamedOptionModule [ "services" "redshift" "provider" ] [ "location" "provider" ])
];
options.services.redshift = {
enable = lib.mkOption {
type = lib.types.bool;
enable = mkOption {
type = types.bool;
default = false;
description = ''
Enable Redshift to change your screen's colour temperature depending on
@@ -47,16 +50,16 @@ in
};
temperature = {
day = lib.mkOption {
type = lib.types.int;
day = mkOption {
type = types.int;
default = 5500;
description = ''
Colour temperature to use during the day, between
`1000` and `25000` K.
'';
};
night = lib.mkOption {
type = lib.types.int;
night = mkOption {
type = types.int;
default = 3700;
description = ''
Colour temperature to use at night, between
@@ -66,16 +69,16 @@ in
};
brightness = {
day = lib.mkOption {
type = lib.types.str;
day = mkOption {
type = types.str;
default = "1";
description = ''
Screen brightness to apply during the day,
between `0.1` and `1.0`.
'';
};
night = lib.mkOption {
type = lib.types.str;
night = mkOption {
type = types.str;
default = "1";
description = ''
Screen brightness to apply during the night,
@@ -84,10 +87,10 @@ in
};
};
package = lib.mkPackageOption pkgs "redshift" { };
package = mkPackageOption pkgs "redshift" { };
executable = lib.mkOption {
type = lib.types.str;
executable = mkOption {
type = types.str;
default = "/bin/redshift";
example = "/bin/redshift-gtk";
description = ''
@@ -95,8 +98,8 @@ in
'';
};
extraOptions = lib.mkOption {
type = lib.types.listOf lib.types.str;
extraOptions = mkOption {
type = types.listOf types.str;
default = [ ];
example = [
"-v"
@@ -109,7 +112,7 @@ in
};
};
config = lib.mkIf cfg.enable {
config = mkIf cfg.enable {
# needed so that .desktop files are installed, which geoclue cares about
environment.systemPackages = [ cfg.package ];
+7 -4
View File
@@ -4,24 +4,27 @@
pkgs,
...
}:
with lib;
let
cfg = config.services.touchegg;
in
{
meta = {
maintainers = lib.teams.pantheon.members;
maintainers = teams.pantheon.members;
};
###### interface
options.services.touchegg = {
enable = lib.mkEnableOption "touchegg, a multi-touch gesture recognizer";
enable = mkEnableOption "touchegg, a multi-touch gesture recognizer";
package = lib.mkPackageOption pkgs "touchegg" { };
package = mkPackageOption pkgs "touchegg" { };
};
###### implementation
config = lib.mkIf cfg.enable {
config = mkIf cfg.enable {
systemd.services.touchegg = {
description = "Touchegg Daemon";
serviceConfig = {
+14 -11
View File
@@ -4,6 +4,9 @@
pkgs,
...
}:
with lib;
let
cfg = config.services.unclutter-xfixes;
@@ -11,29 +14,29 @@ in
{
options.services.unclutter-xfixes = {
enable = lib.mkOption {
enable = mkOption {
description = "Enable unclutter-xfixes to hide your mouse cursor when inactive.";
type = lib.types.bool;
type = types.bool;
default = false;
};
package = lib.mkPackageOption pkgs "unclutter-xfixes" { };
package = mkPackageOption pkgs "unclutter-xfixes" { };
timeout = lib.mkOption {
timeout = mkOption {
description = "Number of seconds before the cursor is marked inactive.";
type = lib.types.int;
type = types.int;
default = 1;
};
threshold = lib.mkOption {
threshold = mkOption {
description = "Minimum number of pixels considered cursor movement.";
type = lib.types.int;
type = types.int;
default = 1;
};
extraOptions = lib.mkOption {
extraOptions = mkOption {
description = "More arguments to pass to the unclutter-xfixes command.";
type = lib.types.listOf lib.types.str;
type = types.listOf types.str;
default = [ ];
example = [
"exclude-root"
@@ -43,7 +46,7 @@ in
};
};
config = lib.mkIf cfg.enable {
config = mkIf cfg.enable {
systemd.user.services.unclutter-xfixes = {
description = "unclutter-xfixes";
wantedBy = [ "graphical-session.target" ];
@@ -52,7 +55,7 @@ in
${cfg.package}/bin/unclutter \
--timeout ${toString cfg.timeout} \
--jitter ${toString (cfg.threshold - 1)} \
${lib.concatMapStrings (x: " --" + x) cfg.extraOptions} \
${concatMapStrings (x: " --" + x) cfg.extraOptions} \
'';
serviceConfig.RestartSec = 3;
serviceConfig.Restart = "always";
+21 -18
View File
@@ -4,6 +4,9 @@
pkgs,
...
}:
with lib;
let
cfg = config.services.unclutter;
@@ -11,42 +14,42 @@ in
{
options.services.unclutter = {
enable = lib.mkOption {
enable = mkOption {
description = "Enable unclutter to hide your mouse cursor when inactive";
type = lib.types.bool;
type = types.bool;
default = false;
};
package = lib.mkPackageOption pkgs "unclutter" { };
package = mkPackageOption pkgs "unclutter" { };
keystroke = lib.mkOption {
keystroke = mkOption {
description = "Wait for a keystroke before hiding the cursor";
type = lib.types.bool;
type = types.bool;
default = false;
};
timeout = lib.mkOption {
timeout = mkOption {
description = "Number of seconds before the cursor is marked inactive";
type = lib.types.int;
type = types.int;
default = 1;
};
threshold = lib.mkOption {
threshold = mkOption {
description = "Minimum number of pixels considered cursor movement";
type = lib.types.int;
type = types.int;
default = 1;
};
excluded = lib.mkOption {
excluded = mkOption {
description = "Names of windows where unclutter should not apply";
type = lib.types.listOf lib.types.str;
type = types.listOf types.str;
default = [ ];
example = [ "" ];
};
extraOptions = lib.mkOption {
extraOptions = mkOption {
description = "More arguments to pass to the unclutter command";
type = lib.types.listOf lib.types.str;
type = types.listOf types.str;
default = [ ];
example = [
"noevent"
@@ -55,7 +58,7 @@ in
};
};
config = lib.mkIf cfg.enable {
config = mkIf cfg.enable {
systemd.user.services.unclutter = {
description = "unclutter";
wantedBy = [ "graphical-session.target" ];
@@ -64,9 +67,9 @@ in
${cfg.package}/bin/unclutter \
-idle ${toString cfg.timeout} \
-jitter ${toString (cfg.threshold - 1)} \
${lib.optionalString cfg.keystroke "-keystroke"} \
${lib.concatMapStrings (x: " -" + x) cfg.extraOptions} \
-not ${lib.concatStringsSep " " cfg.excluded} \
${optionalString cfg.keystroke "-keystroke"} \
${concatMapStrings (x: " -" + x) cfg.extraOptions} \
-not ${concatStringsSep " " cfg.excluded} \
'';
serviceConfig.PassEnvironment = "DISPLAY";
serviceConfig.RestartSec = 3;
@@ -75,7 +78,7 @@ in
};
imports = [
(lib.mkRenamedOptionModule
(mkRenamedOptionModule
[ "services" "unclutter" "threeshold" ]
[ "services" "unclutter" "threshold" ]
)
+8 -4
View File
@@ -4,14 +4,18 @@
pkgs,
...
}:
# maintainer: siddharthist
with lib;
let
cfg = config.services.urxvtd;
in
{
options.services.urxvtd = {
enable = lib.mkOption {
type = lib.types.bool;
enable = mkOption {
type = types.bool;
default = false;
description = ''
Enable urxvtd, the urxvt terminal daemon. To use urxvtd, run
@@ -19,10 +23,10 @@ in
'';
};
package = lib.mkPackageOption pkgs "rxvt-unicode" { };
package = mkPackageOption pkgs "rxvt-unicode" { };
};
config = lib.mkIf cfg.enable {
config = mkIf cfg.enable {
systemd.user.services.urxvtd = {
description = "urxvt terminal daemon";
wantedBy = [ "graphical-session.target" ];
@@ -4,6 +4,9 @@
pkgs,
...
}:
with lib;
let
cfg = config.services.xserver.windowManager."2bwm";
@@ -15,14 +18,14 @@ in
###### interface
options = {
services.xserver.windowManager."2bwm".enable = lib.mkEnableOption "2bwm";
services.xserver.windowManager."2bwm".enable = mkEnableOption "2bwm";
};
###### implementation
config = lib.mkIf cfg.enable {
config = mkIf cfg.enable {
services.xserver.windowManager.session = lib.singleton {
services.xserver.windowManager.session = singleton {
name = "2bwm";
start = ''
${pkgs._2bwm}/bin/2bwm &
@@ -4,18 +4,21 @@
pkgs,
...
}:
with lib;
let
cfg = config.services.xserver.windowManager.afterstep;
in
{
###### interface
options = {
services.xserver.windowManager.afterstep.enable = lib.mkEnableOption "afterstep";
services.xserver.windowManager.afterstep.enable = mkEnableOption "afterstep";
};
###### implementation
config = lib.mkIf cfg.enable {
services.xserver.windowManager.session = lib.singleton {
config = mkIf cfg.enable {
services.xserver.windowManager.session = singleton {
name = "afterstep";
start = ''
${pkgs.afterstep}/bin/afterstep &
@@ -4,6 +4,9 @@
pkgs,
...
}:
with lib;
let
cfg = config.services.xserver.windowManager.awesome;
@@ -22,20 +25,20 @@ in
services.xserver.windowManager.awesome = {
enable = lib.mkEnableOption "Awesome window manager";
enable = mkEnableOption "Awesome window manager";
luaModules = lib.mkOption {
luaModules = mkOption {
default = [ ];
type = lib.types.listOf lib.types.package;
type = types.listOf types.package;
description = "List of lua packages available for being used in the Awesome configuration.";
example = lib.literalExpression "[ pkgs.luaPackages.vicious ]";
example = literalExpression "[ pkgs.luaPackages.vicious ]";
};
package = lib.mkPackageOption pkgs "awesome" { };
package = mkPackageOption pkgs "awesome" { };
noArgb = lib.mkOption {
noArgb = mkOption {
default = false;
type = lib.types.bool;
type = types.bool;
description = "Disable client transparency support, which can be greatly detrimental to performance in some setups";
};
};
@@ -44,9 +47,9 @@ in
###### implementation
config = lib.mkIf cfg.enable {
config = mkIf cfg.enable {
services.xserver.windowManager.session = lib.singleton {
services.xserver.windowManager.session = singleton {
name = "awesome";
start = ''
${awesome}/bin/awesome ${lib.optionalString cfg.noArgb "--no-argb"} ${makeSearchPath cfg.luaModules} &
@@ -4,18 +4,21 @@
pkgs,
...
}:
with lib;
let
cfg = config.services.xserver.windowManager.berry;
in
{
###### interface
options = {
services.xserver.windowManager.berry.enable = lib.mkEnableOption "berry";
services.xserver.windowManager.berry.enable = mkEnableOption "berry";
};
###### implementation
config = lib.mkIf cfg.enable {
services.xserver.windowManager.session = lib.singleton {
config = mkIf cfg.enable {
services.xserver.windowManager.session = singleton {
name = "berry";
start = ''
${pkgs.berry}/bin/berry &
@@ -4,6 +4,9 @@
pkgs,
...
}:
with lib;
let
cfg = config.services.xserver.windowManager.bspwm;
in
@@ -11,14 +14,14 @@ in
{
options = {
services.xserver.windowManager.bspwm = {
enable = lib.mkEnableOption "bspwm";
enable = mkEnableOption "bspwm";
package = lib.mkPackageOption pkgs "bspwm" {
package = mkPackageOption pkgs "bspwm" {
example = "bspwm-unstable";
};
configFile = lib.mkOption {
type = with lib.types; nullOr path;
example = lib.literalExpression ''"''${pkgs.bspwm}/share/doc/bspwm/examples/bspwmrc"'';
configFile = mkOption {
type = with types; nullOr path;
example = literalExpression ''"''${pkgs.bspwm}/share/doc/bspwm/examples/bspwmrc"'';
default = null;
description = ''
Path to the bspwm configuration file.
@@ -27,12 +30,12 @@ in
};
sxhkd = {
package = lib.mkPackageOption pkgs "sxhkd" {
package = mkPackageOption pkgs "sxhkd" {
example = "sxhkd-unstable";
};
configFile = lib.mkOption {
type = with lib.types; nullOr path;
example = lib.literalExpression ''"''${pkgs.bspwm}/share/doc/bspwm/examples/sxhkdrc"'';
configFile = mkOption {
type = with types; nullOr path;
example = literalExpression ''"''${pkgs.bspwm}/share/doc/bspwm/examples/sxhkdrc"'';
default = null;
description = ''
Path to the sxhkd configuration file.
@@ -43,15 +46,15 @@ in
};
};
config = lib.mkIf cfg.enable {
services.xserver.windowManager.session = lib.singleton {
config = mkIf cfg.enable {
services.xserver.windowManager.session = singleton {
name = "bspwm";
start = ''
export _JAVA_AWT_WM_NONREPARENTING=1
SXHKD_SHELL=/bin/sh ${cfg.sxhkd.package}/bin/sxhkd ${
lib.optionalString (cfg.sxhkd.configFile != null) "-c \"${cfg.sxhkd.configFile}\""
optionalString (cfg.sxhkd.configFile != null) "-c \"${cfg.sxhkd.configFile}\""
} &
${cfg.package}/bin/bspwm ${lib.optionalString (cfg.configFile != null) "-c \"${cfg.configFile}\""} &
${cfg.package}/bin/bspwm ${optionalString (cfg.configFile != null) "-c \"${cfg.configFile}\""} &
waitPID=$!
'';
};
@@ -59,17 +62,17 @@ in
};
imports = [
(lib.mkRemovedOptionModule [ "services" "xserver" "windowManager" "bspwm-unstable" "enable" ]
(mkRemovedOptionModule [ "services" "xserver" "windowManager" "bspwm-unstable" "enable" ]
"Use services.xserver.windowManager.bspwm.enable and set services.xserver.windowManager.bspwm.package to pkgs.bspwm-unstable to use the unstable version of bspwm."
)
(lib.mkRemovedOptionModule [
(mkRemovedOptionModule [
"services"
"xserver"
"windowManager"
"bspwm"
"startThroughSession"
] "bspwm package does not provide bspwm-session anymore.")
(lib.mkRemovedOptionModule [
(mkRemovedOptionModule [
"services"
"xserver"
"windowManager"
@@ -4,6 +4,9 @@
pkgs,
...
}:
with lib;
let
cfg = config.services.xserver.windowManager.clfswm;
in
@@ -11,13 +14,13 @@ in
{
options = {
services.xserver.windowManager.clfswm = {
enable = lib.mkEnableOption "clfswm";
package = lib.mkPackageOption pkgs [ "sbclPackages" "clfswm" ] { };
enable = mkEnableOption "clfswm";
package = mkPackageOption pkgs [ "sbclPackages" "clfswm" ] { };
};
};
config = lib.mkIf cfg.enable {
services.xserver.windowManager.session = lib.singleton {
config = mkIf cfg.enable {
services.xserver.windowManager.session = singleton {
name = "clfswm";
start = ''
${cfg.package}/bin/clfswm &
@@ -4,15 +4,18 @@
pkgs,
...
}:
with lib;
let
cfg = config.services.xserver.windowManager.cwm;
in
{
options = {
services.xserver.windowManager.cwm.enable = lib.mkEnableOption "cwm";
services.xserver.windowManager.cwm.enable = mkEnableOption "cwm";
};
config = lib.mkIf cfg.enable {
services.xserver.windowManager.session = lib.singleton {
config = mkIf cfg.enable {
services.xserver.windowManager.session = singleton {
name = "cwm";
start = ''
cwm &
@@ -1,4 +1,7 @@
{ config, lib, pkgs, ... }:
with lib;
let
cfg = config.services.xserver.windowManager.dwm;
@@ -11,8 +14,8 @@ in
options = {
services.xserver.windowManager.dwm = {
enable = lib.mkEnableOption "dwm";
package = lib.mkPackageOption pkgs "dwm" {
enable = mkEnableOption "dwm";
package = mkPackageOption pkgs "dwm" {
example = ''
pkgs.dwm.overrideAttrs (oldAttrs: rec {
patches = [
@@ -30,9 +33,9 @@ in
###### implementation
config = lib.mkIf cfg.enable {
config = mkIf cfg.enable {
services.xserver.windowManager.session = lib.singleton
services.xserver.windowManager.session = singleton
{ name = "dwm";
start =
''
@@ -4,18 +4,21 @@
pkgs,
...
}:
with lib;
let
cfg = config.services.xserver.windowManager.e16;
in
{
###### interface
options = {
services.xserver.windowManager.e16.enable = lib.mkEnableOption "e16";
services.xserver.windowManager.e16.enable = mkEnableOption "e16";
};
###### implementation
config = lib.mkIf cfg.enable {
services.xserver.windowManager.session = lib.singleton {
config = mkIf cfg.enable {
services.xserver.windowManager.session = singleton {
name = "E16";
start = ''
${pkgs.e16}/bin/e16 &