Merge pull request #216737 from FedericoSchonborn/budgie

Budgie Desktop

Changed files
+895 -2
nixos
doc
manual
release-notes
modules
services
x11
desktop-managers
tests
pkgs
desktops
budgie
budgie-backgrounds
budgie-control-center
budgie-desktop
budgie-desktop-view
budgie-gsettings-overrides
gnome
core
gnome-session
+2
nixos/doc/manual/release-notes/rl-2305.section.md
···
- [stevenblack-blocklist](https://github.com/StevenBlack/hosts), A unified hosts file with base extensions for blocking unwanted websites. Available as [networking.stevenblack](options.html#opt-networking.stevenblack.enable).
+
- [Budgie Desktop](https://github.com/BuddiesOfBudgie/budgie-desktop), a familiar, modern desktop environment. Availabe as [services.xserver.desktopManager.budgie](options.html#opt-services.xserver.desktopManager.budgie).
+
- [imaginary](https://github.com/h2non/imaginary), a microservice for high-level image processing that Nextcloud can use to generate previews. Available as [services.imaginary](#opt-services.imaginary.enable).
- [opensearch](https://opensearch.org), a search server alternative to Elasticsearch. Available as [services.opensearch](options.html#opt-services.opensearch.enable).
+201
nixos/modules/services/x11/desktop-managers/budgie.nix
···
+
{ lib, pkgs, config, utils, ... }:
+
+
let
+
inherit (lib) concatMapStrings literalExpression mdDoc mkDefault mkEnableOption mkIf mkOption types;
+
+
cfg = config.services.xserver.desktopManager.budgie;
+
+
nixos-background-light = pkgs.nixos-artwork.wallpapers.nineish;
+
nixos-background-dark = pkgs.nixos-artwork.wallpapers.nineish-dark-gray;
+
+
nixos-gsettings-overrides = pkgs.budgie.budgie-gsettings-overrides.override {
+
inherit (cfg) extraGSettingsOverrides extraGSettingsOverridePackages;
+
inherit nixos-background-dark nixos-background-light;
+
};
+
in {
+
options = {
+
services.xserver.desktopManager.budgie = {
+
enable = mkEnableOption (mdDoc "Budgie desktop");
+
+
sessionPath = mkOption {
+
description = mdDoc "Additional list of packages to be added to the session search path. Useful for GSettings-conditional autostart.";
+
type = with types; listOf package;
+
example = literalExpression "[ pkgs.budgie.budgie-desktop-view ]";
+
default = [];
+
};
+
+
extraGSettingsOverrides = mkOption {
+
description = mdDoc "Additional GSettings overrides.";
+
type = types.lines;
+
default = "";
+
};
+
+
extraGSettingsOverridePackages = mkOption {
+
description = mdDoc "List of packages for which GSettings are overridden.";
+
type = with types; listOf path;
+
default = [];
+
};
+
};
+
+
environment.budgie.excludePackages = mkOption {
+
description = mdDoc "Which packages Budgie should exclude from the default environment.";
+
type = with types; listOf package;
+
default = [];
+
example = literalExpression "[ pkgs.mate-terminal ]";
+
};
+
};
+
+
config = mkIf cfg.enable {
+
services.xserver.displayManager.sessionPackages = with pkgs; [
+
budgie.budgie-desktop
+
];
+
+
services.xserver.displayManager.lightdm.greeters.slick = {
+
enable = mkDefault true;
+
theme = mkDefault { name = "Qogir"; package = pkgs.qogir-theme; };
+
iconTheme = mkDefault { name = "Qogir"; package = pkgs.qogir-icon-theme; };
+
cursorTheme = mkDefault { name = "Qogir"; package = pkgs.qogir-icon-theme; };
+
};
+
+
services.xserver.desktopManager.budgie.sessionPath = [ pkgs.budgie.budgie-desktop-view ];
+
+
environment.extraInit = ''
+
${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
+
if [ -d "${p}/lib/girepository-1.0" ]; then
+
export GI_TYPELIB_PATH=$GI_TYPELIB_PATH''${GI_TYPELIB_PATH:+:}${p}/lib/girepository-1.0
+
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH''${LD_LIBRARY_PATH:+:}${p}/lib
+
fi
+
'') cfg.sessionPath}
+
'';
+
+
environment.systemPackages = with pkgs;
+
[
+
# Budgie Desktop.
+
budgie.budgie-backgrounds
+
budgie.budgie-control-center
+
budgie.budgie-desktop
+
budgie.budgie-desktop-view
+
budgie.budgie-screensaver
+
+
# Required by the Budgie Desktop session.
+
(gnome.gnome-session.override {gnomeShellSupport = false;})
+
+
# Required by Budgie Menu.
+
gnome-menus
+
+
# Provides `gsettings`.
+
glib
+
+
# Update user directories.
+
xdg-user-dirs
+
]
+
++ (utils.removePackagesByName [
+
cinnamon.nemo
+
mate.eom
+
mate.pluma
+
mate.atril
+
mate.engrampa
+
mate.mate-calc
+
mate.mate-terminal
+
mate.mate-system-monitor
+
vlc
+
+
# Desktop themes.
+
qogir-theme
+
qogir-icon-theme
+
+
# Default settings.
+
nixos-gsettings-overrides
+
] config.environment.budgie.excludePackages)
+
++ cfg.sessionPath;
+
+
# Fonts.
+
fonts.fonts = mkDefault [
+
pkgs.noto-fonts
+
pkgs.hack-font
+
];
+
fonts.fontconfig.defaultFonts = {
+
sansSerif = mkDefault ["Noto Sans"];
+
monospace = mkDefault ["Hack"];
+
};
+
+
# Qt application style.
+
qt = {
+
enable = mkDefault true;
+
style = mkDefault "gtk2";
+
platformTheme = mkDefault "gtk2";
+
};
+
+
environment.pathsToLink = [
+
"/share" # TODO: https://github.com/NixOS/nixpkgs/issues/47173
+
];
+
+
# GSettings overrides.
+
environment.sessionVariables.NIX_GSETTINGS_OVERRIDES_DIR = "${nixos-gsettings-overrides}/share/gsettings-schemas/nixos-gsettings-overrides/glib-2.0/schemas";
+
+
# Required by Budgie Desktop.
+
services.xserver.updateDbusEnvironment = true;
+
programs.dconf.enable = true;
+
+
# Required by Budgie Screensaver.
+
security.pam.services.budgie-screensaver = {};
+
+
# Required by Budgie's Polkit Dialog.
+
security.polkit.enable = mkDefault true;
+
+
# Required by Budgie Panel plugins and/or Budgie Control Center panels.
+
networking.networkmanager.enable = mkDefault true; # for BCC's Network panel.
+
programs.nm-applet.enable = config.networking.networkmanager.enable; # Budgie has no Network applet.
+
programs.nm-applet.indicator = false; # Budgie doesn't support AppIndicators.
+
+
hardware.bluetooth.enable = mkDefault true; # for Budgie's Status Indicator and BCC's Bluetooth panel.
+
hardware.pulseaudio.enable = mkDefault true; # for Budgie's Status Indicator and BCC's Sound panel.
+
+
xdg.portal.enable = mkDefault true; # for BCC's Applications panel.
+
xdg.portal.extraPortals = with pkgs; [
+
xdg-desktop-portal-gtk # provides a XDG Portals implementation.
+
];
+
+
services.geoclue2.enable = mkDefault true; # for BCC's Privacy > Location Services panel.
+
services.upower.enable = config.powerManagement.enable; # for Budgie's Status Indicator and BCC's Power panel.
+
services.xserver.libinput.enable = mkDefault true; # for BCC's Mouse panel.
+
services.colord.enable = mkDefault true; # for BCC's Color panel.
+
services.gnome.at-spi2-core.enable = mkDefault true; # for BCC's A11y panel.
+
services.accounts-daemon.enable = mkDefault true; # for BCC's Users panel.
+
services.fprintd.enable = mkDefault true; # for BCC's Users panel.
+
services.udisks2.enable = mkDefault true; # for BCC's Details panel.
+
+
# For BCC's Online Accounts panel.
+
services.gnome.gnome-online-accounts.enable = mkDefault true;
+
services.gnome.gnome-online-miners.enable = true;
+
+
# For BCC's Printers panel.
+
services.printing.enable = mkDefault true;
+
services.system-config-printer.enable = config.services.printing.enable;
+
+
# For BCC's Sharing panel.
+
services.dleyna-renderer.enable = mkDefault true;
+
services.dleyna-server.enable = mkDefault true;
+
services.gnome.gnome-user-share.enable = mkDefault true;
+
services.gnome.rygel.enable = mkDefault true;
+
+
# Other default services.
+
services.gnome.evolution-data-server.enable = mkDefault true;
+
services.gnome.glib-networking.enable = mkDefault true;
+
services.gnome.gnome-keyring.enable = mkDefault true;
+
services.gnome.gnome-settings-daemon.enable = mkDefault true;
+
services.gvfs.enable = mkDefault true;
+
+
# Register packages for DBus.
+
services.dbus.packages = with pkgs; [
+
budgie.budgie-control-center
+
];
+
+
# Shell integration for MATE Terminal.
+
programs.bash.vteIntegration = true;
+
programs.zsh.vteIntegration = true;
+
};
+
}
+1 -1
nixos/modules/services/x11/desktop-managers/default.nix
···
./none.nix ./xterm.nix ./phosh.nix ./xfce.nix ./plasma5.nix ./lumina.nix
./lxqt.nix ./enlightenment.nix ./gnome.nix ./retroarch.nix ./kodi.nix
./mate.nix ./pantheon.nix ./surf-display.nix ./cde.nix
-
./cinnamon.nix
+
./cinnamon.nix ./budgie.nix
];
options = {
+1
nixos/tests/all-tests.nix
···
btrbk-doas = handleTest ./btrbk-doas.nix {};
btrbk-no-timer = handleTest ./btrbk-no-timer.nix {};
btrbk-section-order = handleTest ./btrbk-section-order.nix {};
+
budgie = handleTest ./budgie.nix {};
buildbot = handleTest ./buildbot.nix {};
buildkite-agents = handleTest ./buildkite-agents.nix {};
caddy = handleTest ./caddy.nix {};
+51
nixos/tests/budgie.nix
···
+
import ./make-test-python.nix ({ pkgs, lib, ... }: {
+
name = "budgie";
+
+
meta = with lib; {
+
maintainers = [ maintainers.federicoschonborn ];
+
};
+
+
nodes.machine = { ... }: {
+
imports = [
+
./common/user-account.nix
+
];
+
+
services.xserver.enable = true;
+
+
services.xserver.displayManager = {
+
lightdm.enable = true;
+
autoLogin = {
+
enable = true;
+
user = "alice";
+
};
+
};
+
+
services.xserver.desktopManager.budgie.enable = true;
+
};
+
+
testScript = { nodes, ... }:
+
let
+
user = nodes.machine.users.users.alice;
+
in
+
''
+
with subtest("Wait for login"):
+
machine.wait_for_x()
+
machine.wait_for_file("${user.home}/.Xauthority")
+
machine.succeed("xauth merge ${user.home}/.Xauthority")
+
+
with subtest("Check that logging in has given the user ownership of devices"):
+
machine.succeed("getfacl -p /dev/snd/timer | grep -q ${user.name}")
+
+
with subtest("Check if Budgie session components actually start"):
+
machine.wait_until_succeeds("pgrep budgie-daemon")
+
machine.wait_for_window("budgie-daemon")
+
machine.wait_until_succeeds("pgrep budgie-panel")
+
machine.wait_for_window("budgie-panel")
+
+
with subtest("Open MATE terminal"):
+
machine.succeed("su - ${user.name} -c 'DISPLAY=:0 mate-terminal >&2 &'")
+
machine.wait_for_window("Terminal")
+
machine.sleep(20)
+
machine.screenshot("screen")
+
'';
+
})
+40
pkgs/desktops/budgie/budgie-backgrounds/default.nix
···
+
{ lib
+
, stdenv
+
, fetchFromGitHub
+
, imagemagick
+
, jhead
+
, meson
+
, ninja
+
}:
+
+
stdenv.mkDerivation rec {
+
pname = "budgie-backgrounds";
+
version = "0.1";
+
+
src = fetchFromGitHub {
+
owner = "BuddiesOfBudgie";
+
repo = "budgie-backgrounds";
+
rev = "v${version}";
+
hash = "sha256-pDFd+WvWOPgDoSffmX9mzjDQbhePsJV1wGqmPDcnOlw=";
+
};
+
+
nativeBuildInputs = [
+
imagemagick
+
jhead
+
meson
+
ninja
+
];
+
+
preConfigure = ''
+
chmod +x ./scripts/optimizeImage.sh
+
patchShebangs ./scripts/optimizeImage.sh
+
'';
+
+
meta = with lib; {
+
description = "The default background set for the Budgie Desktop";
+
homepage = "https://github.com/BuddiesOfBudgie/budgie-backgrounds";
+
platforms = platforms.linux;
+
maintainers = [ maintainers.federicoschonborn ];
+
license = licenses.cc0;
+
};
+
}
+175
pkgs/desktops/budgie/budgie-control-center/default.nix
···
+
{ lib
+
, stdenv
+
, fetchFromGitHub
+
, substituteAll
+
, accountsservice
+
, budgie-desktop
+
, clutter
+
, clutter-gtk
+
, colord
+
, colord-gtk
+
, cups
+
, docbook-xsl-nons
+
, fontconfig
+
, gcr
+
, gdk-pixbuf
+
, gettext
+
, glib
+
, glib-networking
+
, glibc
+
, gnome
+
, gnome-desktop
+
, gnome-online-accounts
+
, gsettings-desktop-schemas
+
, gsound
+
, gtk3
+
, ibus
+
, libcanberra-gtk3
+
, libepoxy
+
, libgnomekbd
+
, libgtop
+
, libgudev
+
, libhandy
+
, libkrb5
+
, libnma
+
, libpulseaudio
+
, libpwquality
+
, librsvg
+
, libsecret
+
, libwacom
+
, libxml2
+
, libxslt
+
, meson
+
, modemmanager
+
, networkmanager
+
, networkmanagerapplet
+
, ninja
+
, pkg-config
+
, polkit
+
, samba
+
, shadow
+
, shared-mime-info
+
, tzdata
+
, udisks2
+
, upower
+
, webp-pixbuf-loader
+
, wrapGAppsHook
+
}:
+
+
stdenv.mkDerivation rec {
+
pname = "budgie-control-center";
+
version = "1.2.0";
+
+
src = fetchFromGitHub {
+
owner = "BuddiesOfBudgie";
+
repo = pname;
+
rev = "v${version}";
+
fetchSubmodules = true;
+
sha256 = "sha256-z9apestNLEUKzrCMNo0BNAWeyE6FsUCAzcHIom8LcUs=";
+
};
+
+
patches = [
+
(substituteAll {
+
src = ./paths.patch;
+
budgie_desktop = budgie-desktop;
+
gcm = gnome.gnome-color-manager;
+
inherit cups glibc libgnomekbd shadow;
+
inherit networkmanagerapplet tzdata;
+
})
+
];
+
+
nativeBuildInputs = [
+
docbook-xsl-nons
+
gettext
+
libxslt
+
meson
+
ninja
+
pkg-config
+
shared-mime-info
+
wrapGAppsHook
+
];
+
+
buildInputs = [
+
accountsservice
+
clutter
+
clutter-gtk
+
colord
+
colord-gtk
+
fontconfig
+
gcr
+
gdk-pixbuf
+
glib
+
glib-networking
+
gnome-desktop
+
gnome-online-accounts
+
gnome.adwaita-icon-theme
+
gnome.cheese
+
gnome.gnome-bluetooth_1_0
+
gnome.gnome-remote-desktop
+
gnome.gnome-settings-daemon
+
gnome.gnome-user-share
+
gnome.mutter
+
gsettings-desktop-schemas
+
gsound
+
gtk3
+
ibus
+
libcanberra-gtk3
+
libepoxy
+
libgtop
+
libgudev
+
libhandy
+
libkrb5
+
libnma
+
libpulseaudio
+
libpwquality
+
librsvg
+
libsecret
+
libwacom
+
libxml2
+
modemmanager
+
networkmanager
+
polkit
+
samba
+
udisks2
+
upower
+
];
+
+
preConfigure = ''
+
# For ITS rules
+
addToSearchPath "XDG_DATA_DIRS" "${polkit.out}/share"
+
'';
+
+
postInstall = ''
+
# Pull in WebP support for gnome-backgrounds.
+
# In postInstall to run before gappsWrapperArgsHook.
+
export GDK_PIXBUF_MODULE_FILE="${gnome._gdkPixbufCacheBuilder_DO_NOT_USE {
+
extraLoaders = [
+
librsvg
+
webp-pixbuf-loader
+
];
+
}}"
+
'';
+
+
preFixup = ''
+
gappsWrapperArgs+=(
+
# Sound theme
+
--prefix XDG_DATA_DIRS : "${budgie-desktop}/share"
+
# Thumbnailers (for setting user profile pictures)
+
--prefix XDG_DATA_DIRS : "${gdk-pixbuf}/share"
+
--prefix XDG_DATA_DIRS : "${librsvg}/share"
+
# WM keyboard shortcuts
+
--prefix XDG_DATA_DIRS : "${gnome.mutter}/share"
+
)
+
'';
+
+
separateDebugInfo = true;
+
+
meta = with lib; {
+
description = "A fork of GNOME Control Center for the Budgie 10 Series";
+
homepage = "https://github.com/BuddiesOfBudgie/budgie-control-center";
+
mainProgram = "budgie-control-center";
+
platforms = platforms.linux;
+
maintainers = [ maintainers.federicoschonborn ];
+
license = licenses.gpl2Plus;
+
};
+
}
+185
pkgs/desktops/budgie/budgie-control-center/paths.patch
···
+
diff --git a/panels/color/cc-color-panel.c b/panels/color/cc-color-panel.c
+
index a2f90b093..7801b4a5e 100644
+
--- a/panels/color/cc-color-panel.c
+
+++ b/panels/color/cc-color-panel.c
+
@@ -587,7 +587,7 @@ gcm_prefs_calibrate_cb (CcColorPanel *prefs)
+
+
/* run with modal set */
+
argv = g_ptr_array_new_with_free_func (g_free);
+
- g_ptr_array_add (argv, g_strdup ("gcm-calibrate"));
+
+ g_ptr_array_add (argv, g_build_filename ("@gcm@", "bin", "gcm-calibrate", NULL));
+
g_ptr_array_add (argv, g_strdup ("--device"));
+
g_ptr_array_add (argv, g_strdup (cd_device_get_id (prefs->current_device)));
+
g_ptr_array_add (argv, g_strdup ("--parent-window"));
+
@@ -940,7 +940,7 @@ gcm_prefs_profile_view (CcColorPanel *prefs, CdProfile *profile)
+
+
/* open up gcm-viewer as a info pane */
+
argv = g_ptr_array_new_with_free_func (g_free);
+
- g_ptr_array_add (argv, g_strdup ("gcm-viewer"));
+
+ g_ptr_array_add (argv, g_build_filename ("@gcm@", "bin", "gcm-viewer", NULL));
+
g_ptr_array_add (argv, g_strdup ("--profile"));
+
g_ptr_array_add (argv, g_strdup (cd_profile_get_id (profile)));
+
g_ptr_array_add (argv, g_strdup ("--parent-window"));
+
@@ -1186,15 +1186,12 @@ gcm_prefs_device_clicked (CcColorPanel *prefs, CdDevice *device)
+
static void
+
gcm_prefs_profile_clicked (CcColorPanel *prefs, CdProfile *profile, CdDevice *device)
+
{
+
- g_autofree gchar *s = NULL;
+
-
+
/* get profile */
+
g_debug ("selected profile = %s",
+
cd_profile_get_filename (profile));
+
+
/* allow getting profile info */
+
- if (cd_profile_get_filename (profile) != NULL &&
+
- (s = g_find_program_in_path ("gcm-viewer")) != NULL)
+
+ if (cd_profile_get_filename (profile) != NULL)
+
gtk_widget_set_sensitive (prefs->toolbutton_profile_view, TRUE);
+
else
+
gtk_widget_set_sensitive (prefs->toolbutton_profile_view, FALSE);
+
diff --git a/panels/datetime/tz.h b/panels/datetime/tz.h
+
index b6b7ab9d0..31f268e91 100644
+
--- a/panels/datetime/tz.h
+
+++ b/panels/datetime/tz.h
+
@@ -4,7 +4,7 @@
+
* Copyright (C) 2000-2001 Ximian, Inc.
+
*
+
* Authors: Hans Petter Jansson <hpj@ximian.com>
+
- *
+
+ *
+
* Largely based on Michael Fulbright's work on Anaconda.
+
*
+
* This program is free software; you can redistribute it and/or modify
+
@@ -27,11 +27,7 @@
+
+
G_BEGIN_DECLS
+
+
-#ifndef __sun
+
-# define TZ_DATA_FILE "/usr/share/zoneinfo/zone.tab"
+
-#else
+
-# define TZ_DATA_FILE "/usr/share/lib/zoneinfo/tab/zone_sun.tab"
+
-#endif
+
+#define TZ_DATA_FILE "@tzdata@/share/zoneinfo/zone.tab"
+
+
typedef struct _TzDB TzDB;
+
typedef struct _TzLocation TzLocation;
+
diff --git a/panels/info-overview/cc-info-overview-panel.c b/panels/info-overview/cc-info-overview-panel.c
+
index 25cda02d3..db664bc56 100644
+
--- a/panels/info-overview/cc-info-overview-panel.c
+
+++ b/panels/info-overview/cc-info-overview-panel.c
+
@@ -156,7 +156,7 @@ load_budgie_version (char **version)
+
gsize length;
+
g_autoptr(VersionData) data = NULL;
+
+
- if (!g_file_get_contents (DATADIR "/budgie/budgie-version.xml",
+
+ if (!g_file_get_contents ("@budgie_desktop@/share/budgie/budgie-version.xml",
+
&contents,
+
&length,
+
&error))
+
diff --git a/panels/keyboard/cc-input-list-box.c b/panels/keyboard/cc-input-list-box.c
+
index 191207490..37e0fddc2 100644
+
--- a/panels/keyboard/cc-input-list-box.c
+
+++ b/panels/keyboard/cc-input-list-box.c
+
@@ -62,7 +62,7 @@ struct _CcInputListBox {
+
};
+
+
G_DEFINE_TYPE (CcInputListBox, cc_input_list_box, GTK_TYPE_LIST_BOX)
+
-
+
+
+
typedef struct
+
{
+
CcInputListBox *panel;
+
@@ -223,10 +223,10 @@ row_layout_cb (CcInputListBox *self,
+
layout_variant = cc_input_source_get_layout_variant (source);
+
+
if (layout_variant && layout_variant[0])
+
- commandline = g_strdup_printf ("gkbd-keyboard-display -l \"%s\t%s\"",
+
+ commandline = g_strdup_printf ("@libgnomekbd@/bin/gkbd-keyboard-display -l \"%s\t%s\"",
+
layout, layout_variant);
+
else
+
- commandline = g_strdup_printf ("gkbd-keyboard-display -l %s",
+
+ commandline = g_strdup_printf ("@libgnomekbd@/bin/gkbd-keyboard-display -l %s",
+
layout);
+
+
g_spawn_command_line_async (commandline, NULL);
+
diff --git a/panels/network/connection-editor/net-connection-editor.c b/panels/network/connection-editor/net-connection-editor.c
+
index 505b8ee25..62e94009f 100644
+
--- a/panels/network/connection-editor/net-connection-editor.c
+
+++ b/panels/network/connection-editor/net-connection-editor.c
+
@@ -267,9 +267,9 @@ net_connection_editor_do_fallback (NetConnectionEditor *self, const gchar *type)
+
g_autoptr(GError) error = NULL;
+
+
if (self->is_new_connection) {
+
- cmdline = g_strdup_printf ("nm-connection-editor --type='%s' --create", type);
+
+ cmdline = g_strdup_printf ("@networkmanagerapplet@/bin/nm-connection-editor --type='%s' --create", type);
+
} else {
+
- cmdline = g_strdup_printf ("nm-connection-editor --edit='%s'",
+
+ cmdline = g_strdup_printf ("@networkmanagerapplet@/bin/nm-connection-editor --edit='%s'",
+
nm_connection_get_uuid (self->connection));
+
}
+
+
diff --git a/panels/network/net-device-bluetooth.c b/panels/network/net-device-bluetooth.c
+
index 372c0c4f8..464f4b6a0 100644
+
--- a/panels/network/net-device-bluetooth.c
+
+++ b/panels/network/net-device-bluetooth.c
+
@@ -141,7 +141,7 @@ options_button_clicked_cb (NetDeviceBluetooth *self)
+
+
connection = net_device_get_find_connection (self->client, self->device);
+
uuid = nm_connection_get_uuid (connection);
+
- cmdline = g_strdup_printf ("nm-connection-editor --edit %s", uuid);
+
+ cmdline = g_strdup_printf ("@networkmanagerapplet@/bin/nm-connection-editor --edit %s", uuid);
+
g_debug ("Launching '%s'\n", cmdline);
+
if (!g_spawn_command_line_async (cmdline, &error))
+
g_warning ("Failed to launch nm-connection-editor: %s", error->message);
+
diff --git a/panels/network/net-device-mobile.c b/panels/network/net-device-mobile.c
+
index f50fd5d07..c6f6f776e 100644
+
--- a/panels/network/net-device-mobile.c
+
+++ b/panels/network/net-device-mobile.c
+
@@ -522,7 +522,7 @@ options_button_clicked_cb (NetDeviceMobile *self)
+
+
connection = net_device_get_find_connection (self->client, self->device);
+
uuid = nm_connection_get_uuid (connection);
+
- cmdline = g_strdup_printf ("nm-connection-editor --edit %s", uuid);
+
+ cmdline = g_strdup_printf ("@networkmanagerapplet@/bin/nm-connection-editor --edit %s", uuid);
+
g_debug ("Launching '%s'\n", cmdline);
+
if (!g_spawn_command_line_async (cmdline, &error))
+
g_warning ("Failed to launch nm-connection-editor: %s", error->message);
+
diff --git a/panels/printers/pp-host.c b/panels/printers/pp-host.c
+
index a31a606e3..ed5133d29 100644
+
--- a/panels/printers/pp-host.c
+
+++ b/panels/printers/pp-host.c
+
@@ -256,7 +256,7 @@ _pp_host_get_snmp_devices_thread (GTask *task,
+
devices = g_ptr_array_new_with_free_func (g_object_unref);
+
+
argv = g_new0 (gchar *, 3);
+
- argv[0] = g_strdup ("/usr/lib/cups/backend/snmp");
+
+ argv[0] = g_strdup ("@cups@/lib/cups/backend/snmp");
+
argv[1] = g_strdup (priv->hostname);
+
+
/* Use SNMP to get printer's informations */
+
diff --git a/panels/user-accounts/run-passwd.c b/panels/user-accounts/run-passwd.c
+
index 86f53d4fc..0b052856f 100644
+
--- a/panels/user-accounts/run-passwd.c
+
+++ b/panels/user-accounts/run-passwd.c
+
@@ -150,7 +150,7 @@ spawn_passwd (PasswdHandler *passwd_handler, GError **error)
+
gchar **envp;
+
gint my_stdin, my_stdout, my_stderr;
+
+
- argv[0] = "/usr/bin/passwd"; /* Is it safe to rely on a hard-coded path? */
+
+ argv[0] = "/run/wrappers/bin/passwd"; /* Is it safe to rely on a hard-coded path? */
+
argv[1] = NULL;
+
+
envp = g_get_environ ();
+
diff --git a/panels/user-accounts/user-utils.c b/panels/user-accounts/user-utils.c
+
index 0de83479e..628e35247 100644
+
--- a/panels/user-accounts/user-utils.c
+
+++ b/panels/user-accounts/user-utils.c
+
@@ -497,7 +497,7 @@ is_valid_username_async (const gchar *username,
+
* future, so it would be nice to have some official way for this
+
* instead of relying on the current "--login" implementation.
+
*/
+
- argv[0] = "/usr/sbin/usermod";
+
+ argv[0] = "@shadow@/bin/usermod";
+
argv[1] = "--login";
+
argv[2] = data->username;
+
argv[3] = "--";
+53
pkgs/desktops/budgie/budgie-desktop-view/default.nix
···
+
{ lib
+
, stdenv
+
, fetchFromGitHub
+
, desktop-file-utils
+
, glib
+
, gtk3
+
, intltool
+
, meson
+
, ninja
+
, pkg-config
+
, vala
+
, wrapGAppsHook
+
}:
+
+
stdenv.mkDerivation rec {
+
pname = "budgie-desktop-view";
+
version = "1.2.1";
+
+
src = fetchFromGitHub {
+
owner = "BuddiesOfBudgie";
+
repo = pname;
+
rev = "v${version}";
+
sha256 = "sha256-USsySJuDov2oe9UXyzACBAyYIRLKSXOMXdia8Ix/8TE=";
+
};
+
+
nativeBuildInputs = [
+
desktop-file-utils
+
intltool
+
meson
+
ninja
+
pkg-config
+
vala
+
wrapGAppsHook
+
];
+
+
buildInputs = [
+
glib
+
gtk3
+
];
+
+
preInstall = ''
+
substituteInPlace ../scripts/mesonPostInstall.sh --replace "update-desktop-database -q" "update-desktop-database $out/share/applications"
+
'';
+
+
meta = with lib; {
+
description = "The official Budgie desktop icons application/implementation";
+
homepage = "https://github.com/BuddiesOfBudgie/budgie-desktop-view";
+
mainProgram = "org.buddiesofbudgie.budgie-desktop-view";
+
platforms = platforms.linux;
+
maintainers = [ maintainers.federicoschonborn ];
+
license = licenses.asl20;
+
};
+
}
+101
pkgs/desktops/budgie/budgie-desktop/default.nix
···
+
{ lib
+
, stdenv
+
, fetchFromGitHub
+
, accountsservice
+
, alsa-lib
+
, budgie-screensaver
+
, docbook-xsl-nons
+
, glib
+
, gnome
+
, gnome-desktop
+
, gnome-menus
+
, graphene
+
, gst_all_1
+
, gtk-doc
+
, gtk3
+
, ibus
+
, intltool
+
, libcanberra-gtk3
+
, libgee
+
, libGL
+
, libnotify
+
, libpeas
+
, libpulseaudio
+
, libuuid
+
, libwnck
+
, mesa
+
, meson
+
, ninja
+
, pkg-config
+
, polkit
+
, sassc
+
, upower
+
, vala
+
, wrapGAppsHook
+
}:
+
+
stdenv.mkDerivation rec {
+
pname = "budgie-desktop";
+
version = "10.7.1";
+
+
src = fetchFromGitHub {
+
owner = "BuddiesOfBudgie";
+
repo = pname;
+
rev = "v${version}";
+
fetchSubmodules = true;
+
sha256 = "sha256-ww65J9plixbxFza6xCfaz1WYtT9giKkLVH1XYxH41+0=";
+
};
+
+
nativeBuildInputs = [
+
docbook-xsl-nons
+
gtk-doc
+
intltool
+
meson
+
ninja
+
pkg-config
+
vala
+
wrapGAppsHook
+
];
+
+
buildInputs = [
+
accountsservice
+
alsa-lib
+
budgie-screensaver
+
glib
+
gnome-desktop
+
gnome-menus
+
gnome.gnome-bluetooth_1_0
+
gnome.gnome-settings-daemon
+
gnome.mutter
+
graphene
+
gtk3
+
ibus
+
libcanberra-gtk3
+
libgee
+
libGL
+
libnotify
+
libpeas
+
libpulseaudio
+
libuuid
+
libwnck
+
mesa
+
polkit
+
sassc
+
upower
+
] ++ (with gst_all_1; [
+
gstreamer
+
gst-plugins-base
+
]);
+
+
passthru.providedSessions = [
+
"budgie-desktop"
+
];
+
+
meta = with lib; {
+
description = "A feature-rich, modern desktop designed to keep out the way of the user";
+
homepage = "https://github.com/BuddiesOfBudgie/budgie-desktop";
+
platforms = platforms.linux;
+
maintainers = [ maintainers.federicoschonborn ];
+
license = with licenses; [ gpl2Plus lgpl21Plus cc-by-sa-30];
+
};
+
}
+78
pkgs/desktops/budgie/budgie-gsettings-overrides/default.nix
···
+
{ lib
+
, runCommand
+
, budgie-desktop
+
, budgie-desktop-view
+
, glib
+
, gnome
+
, gsettings-desktop-schemas
+
, mate
+
, nixos-artwork
+
, nixos-background-light ? nixos-artwork.wallpapers.nineish
+
, nixos-background-dark ? nixos-artwork.wallpapers.nineish-dark-gray
+
, extraGSettingsOverrides ? ""
+
, extraGSettingsOverridePackages ? []
+
}:
+
+
let
+
inherit (lib) concatMapStringsSep;
+
+
gsettingsOverrides = ''
+
[org.gnome.desktop.background:Budgie]
+
picture-uri="file://${nixos-background-light.gnomeFilePath}"
+
picture-uri-dark="file://${nixos-background-dark.gnomeFilePath}"
+
+
[org.gnome.desktop.screensaver:Budgie]
+
picture-uri="file://${nixos-background-dark.gnomeFilePath}"
+
+
[org.gnome.desktop.interface:Budgie]
+
gtk-theme="Qogir"
+
icon-theme="Qogir"
+
cursor-theme="Qogir"
+
font-name="Noto Sans 10"
+
document-font-name="Noto Sans 10"
+
monospace-font-name="Hack 10"
+
enable-hot-corners=true
+
+
[org.gnome.desktop.wm.preferences:Budgie]
+
titlebar-font="Noto Sans Bold 10"
+
+
[org.gnome.mutter:Budgie]
+
workspaces-only-on-primary=true
+
+
[com.solus-project.budgie-panel:Budgie]
+
dark-theme=false
+
builtin-theme=false
+
+
[com.solus-project.icon-tasklist:Budgie]
+
pinned-launchers=["nemo.desktop", "vlc.desktop", "mate-terminal.desktop"]
+
+
[org.buddiesofbudgie.budgie-desktop-view:Budgie]
+
show=true
+
click-policy="double"
+
terminal="${mate.mate-terminal}/bin/mate-terminal"
+
+
${extraGSettingsOverrides}
+
'';
+
+
gsettingsOverridePackages = [
+
budgie-desktop
+
budgie-desktop-view
+
gsettings-desktop-schemas
+
gnome.mutter
+
] ++ extraGSettingsOverridePackages;
+
+
in
+
runCommand "budgie-gsettings-overrides" { preferLocalBuild = true; } ''
+
data_dir="$out/share/gsettings-schemas/nixos-gsettings-overrides"
+
schema_dir="$data_dir/glib-2.0/schemas"
+
mkdir -p "$schema_dir"
+
+
${concatMapStringsSep "\n" (pkg: "cp -rf \"${glib.getSchemaPath pkg}\"/*.xml \"${glib.getSchemaPath pkg}\"/*.gschema.override \"$schema_dir\"") gsettingsOverridePackages}
+
+
chmod -R a+w "$data_dir"
+
cat - > "$schema_dir/zz-nixos-defaults.gschema.override" <<- EOF
+
${gsettingsOverrides}
+
EOF
+
+
${glib.dev}/bin/glib-compile-schemas --strict "$schema_dir"
+
''
+5
pkgs/desktops/budgie/default.nix
···
{ lib, pkgs }:
lib.makeScope pkgs.newScope (self: with self; {
+
budgie-backgrounds = callPackage ./budgie-backgrounds { };
+
budgie-control-center = callPackage ./budgie-control-center { };
+
budgie-desktop = callPackage ./budgie-desktop { };
+
budgie-desktop-view = callPackage ./budgie-desktop-view { };
+
budgie-gsettings-overrides = callPackage ./budgie-gsettings-overrides { };
budgie-screensaver = callPackage ./budgie-screensaver { };
})
+2 -1
pkgs/desktops/gnome/core/gnome-session/default.nix
···
, libepoxy
, bash
, gnome-session-ctl
+
, gnomeShellSupport ? true
}:
stdenv.mkDerivation rec {
···
wrapProgram "$out/libexec/gnome-session-binary" \
--prefix GI_TYPELIB_PATH : "$GI_TYPELIB_PATH" \
--suffix XDG_DATA_DIRS : "$out/share:$GSETTINGS_SCHEMAS_PATH" \
-
--suffix XDG_DATA_DIRS : "${gnome.gnome-shell}/share"\
+
${lib.optionalString gnomeShellSupport "--suffix XDG_DATA_DIRS : \"${gnome.gnome-shell}/share\""} \
--suffix XDG_CONFIG_DIRS : "${gnome.gnome-settings-daemon}/etc/xdg"
'';