Merge pull request #216737 from FedericoSchonborn/budgie

Budgie Desktop
This commit is contained in:
Bobby Rong 2023-04-03 10:57:32 +08:00 committed by GitHub
commit 28031f7579
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
13 changed files with 895 additions and 2 deletions

View File

@ -47,6 +47,8 @@ In addition to numerous new and upgraded packages, this release has the followin
- [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).

View File

@ -0,0 +1,201 @@
{ 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;
};
}

View File

@ -21,7 +21,7 @@ in
./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 = {

View File

@ -112,6 +112,7 @@ in {
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 Normal file
View File

@ -0,0 +1,51 @@
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")
'';
})

View File

@ -0,0 +1,40 @@
{ 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;
};
}

View File

@ -0,0 +1,175 @@
{ 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;
};
}

View File

@ -0,0 +1,185 @@
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] = "--";

View File

@ -0,0 +1,53 @@
{ 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;
};
}

View File

@ -0,0 +1,101 @@
{ 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];
};
}

View File

@ -0,0 +1,78 @@
{ 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"
''

View File

@ -1,5 +1,10 @@
{ 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 { };
})

View File

@ -25,6 +25,7 @@
, libepoxy
, bash
, gnome-session-ctl
, gnomeShellSupport ? true
}:
stdenv.mkDerivation rec {
@ -113,7 +114,7 @@ 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"
'';