gnome: custom logo menu + dconf defaults

- Patch Logo Menu v38 to custom entries incl. Containers (DistroShelf)\n- Switch GNOME defaults to programs.dconf profile\n- Add desktop overrides for Thunar->Files and Ghostty->Terminal\n- Enable Thunar integration (gvfs/tumbler/xfconf) and add virt-manager tooling
This commit is contained in:
randogoth 2026-02-03 22:02:35 +02:00
parent c930b2a6bb
commit c299acb87d
5 changed files with 134 additions and 49 deletions

View file

@ -16,32 +16,51 @@ let
in { in {
services.displayManager.gdm.enable = true; services.displayManager.gdm.enable = true;
services.desktopManager.gnome.enable = true; services.desktopManager.gnome.enable = true;
services.desktopManager.gnome.extraGSettingsOverridePackages = [
pkgs.gnome-shell
logoMenuSchemas
];
# Ensure GNOME sees the compiled overrides.
environment.profileRelativeEnvVars.XDG_DATA_DIRS = lib.mkAfter [
"/share/gsettings-schemas/nixos-gsettings-overrides"
];
services.gnome.core-developer-tools.enable = false; services.gnome.core-developer-tools.enable = false;
services.gnome.games.enable = false; services.gnome.games.enable = false;
# System default GNOME Shell extensions (user can still toggle/override). programs.dconf = {
services.desktopManager.gnome.extraGSettingsOverrides = '' enable = true;
[org/gnome/shell] profiles.user.databases = [
disable-user-extensions=false {
enabled-extensions=['all-in-one-clipboard@NiffirgkcaJ.github.com','AlphabeticalAppGrid@stuarthayhurst','app-hider@lynith.dev','blur-my-shell@aunetx','caffeine@patapon.info','logomenu@aryan_k','restartto@tiagoporsch.github.io'] settings = {
"org/gnome/shell" = {
disable-user-extensions = false;
favorite-apps = [
"thunar.desktop"
"com.mitchellh.ghostty.desktop"
"com.ranfdev.DistroShelf.desktop"
"io.github.kolunmi.Bazaar.desktop"
];
enabled-extensions = [
"all-in-one-clipboard@NiffirgkcaJ.github.com"
"AlphabeticalAppGrid@stuarthayhurst"
"app-hider@lynith.dev"
"blur-my-shell@aunetx"
"caffeine@patapon.info"
"logomenu@aryan_k"
"restartto@tiagoporsch.github.io"
];
};
[org/gnome/shell/extensions/logo-menu] "org/gnome/desktop/interface" = {
menu-button-icon-image=51 icon-theme = "Papirus-Dark";
menu-button-terminal='ghostty' gtk-theme = "Adwaita-dark";
menu-button-system-monitor='flatpak run io.missioncenter.MissionCenter' color-scheme = "prefer-dark";
menu-button-extensions-app='com.mattjakeman.ExtensionManager.desktop' };
hide-softwarecentre=true
''; "org/gnome/shell/extensions/logo-menu" = {
menu-button-icon-image = lib.gvariant.mkInt32 51;
menu-button-terminal = "ghostty";
menu-button-system-monitor = "missioncenter";
menu-button-extensions-app = "com.mattjakeman.ExtensionManager.desktop";
hide-softwarecentre = true;
};
};
}
];
};
environment.gnome.excludePackages = with pkgs; [ environment.gnome.excludePackages = with pkgs; [
# comment out to include # comment out to include

View file

@ -1,6 +1,6 @@
diff -ru orig/extension.js mod/extension.js diff -ru logo-menu-patch-orig/extension.js logo-menu-patch-mod/extension.js
--- orig/extension.js 2026-02-03 17:53:49.513281802 +0200 --- logo-menu-patch-orig/extension.js 2026-02-03 21:59:13.353339473 +0200
+++ mod/extension.js 2026-02-03 17:53:49.528021029 +0200 +++ logo-menu-patch-mod/extension.js 2026-02-03 21:59:13.362477131 +0200
@@ -47,13 +47,8 @@ @@ -47,13 +47,8 @@
this.setIconSize(); this.setIconSize();
this.add_child(this.icon); this.add_child(this.icon);
@ -17,7 +17,7 @@ diff -ru orig/extension.js mod/extension.js
// bind middle click option to toggle overview // bind middle click option to toggle overview
this.connect('button-press-event', this._buttonPressEvent.bind(this)); this.connect('button-press-event', this._buttonPressEvent.bind(this));
@@ -64,51 +59,19 @@ @@ -64,51 +59,40 @@
} }
_displayMenuItems() { _displayMenuItems() {
@ -50,7 +50,17 @@ diff -ru orig/extension.js mod/extension.js
- this._addItem(new PopupMenu.PopupSeparatorMenuItem()); - this._addItem(new PopupMenu.PopupSeparatorMenuItem());
- this._addItem(new MenuItem(_('Force Quit App'), () => this._forceQuit())); - this._addItem(new MenuItem(_('Force Quit App'), () => this._forceQuit()));
- } - }
- + this.menu.removeAll();
+
+ // Custom menu layout
+ this._addItem(new MenuItem(_('About My System'), () => this._aboutThisDistro()));
+ this._addItem(new MenuItem(_('System Settings'), () => this._systemPreferences()));
+
+ this._addItem(new PopupMenu.PopupSeparatorMenuItem());
+ this._addItem(new MenuItem(_('Extensions'), () => this._openExtensionsApp()));
+ this._addItem(new MenuItem(_('System Monitor'), () => this._openSystemMonitor()));
+ this._addItem(new MenuItem(_('Terminal'), () => this._openTerminal()));
- if (showPowerOptions) { - if (showPowerOptions) {
- this._addItem(new PopupMenu.PopupSeparatorMenuItem()); - this._addItem(new PopupMenu.PopupSeparatorMenuItem());
- this._addItem(new MenuItem(_('Sleep'), () => this._sleep())); - this._addItem(new MenuItem(_('Sleep'), () => this._sleep()));
@ -65,26 +75,35 @@ diff -ru orig/extension.js mod/extension.js
- } else if (!showPowerOptions && showLockScreen) { - } else if (!showPowerOptions && showLockScreen) {
- this._addItem(new PopupMenu.PopupSeparatorMenuItem()); - this._addItem(new PopupMenu.PopupSeparatorMenuItem());
- this._addItem(new MenuItem(_('Lock Screen'), () => this._lockScreen())); - this._addItem(new MenuItem(_('Lock Screen'), () => this._lockScreen()));
- }
+ this.menu.removeAll();
+
+ // Custom menu layout
+ this._addItem(new MenuItem(_('About My System'), () => this._aboutThisDistro()));
+ this._addItem(new MenuItem(_('System Settings'), () => this._systemPreferences()));
+
+ this._addItem(new PopupMenu.PopupSeparatorMenuItem());
+ this._addItem(new MenuItem(_('Extensions'), () => this._openExtensionsApp()));
+ this._addItem(new MenuItem(_('System Monitor'), () => this._openSystemMonitor()));
+ this._addItem(new MenuItem(_('Terminal'), () => this._openTerminal()));
+
+ this._addItem(new PopupMenu.PopupSeparatorMenuItem()); + this._addItem(new PopupMenu.PopupSeparatorMenuItem());
+ this._addItem(new MenuItem(_('Containers'), () => this._openContainers())); + this._addItem(new MenuItem(_('Containers'), () => this._openContainers()));
+ }
+
+ _openContainers() {
+ // Prefer launching via desktop ID so we don't depend on PATH in the GNOME Shell env.
+ const appSys = Shell.AppSystem.get_default();
+ const app = appSys.lookup_app('com.ranfdev.DistroShelf.desktop');
+ if (app) {
+ try {
+ app.launch(
+ 0,
+ -1,
+ Shell.AppLaunchGpu.APP_PREF
+ );
+ return;
+ } catch (e) {
+ log(e);
+ }
}
+
+ // Fallback: direct command.
+ Util.trySpawnCommandLine('distroshelf');
} }
_buttonPressEvent(actor, event) { _buttonPressEvent(actor, event) {
diff -ru orig/schemas/org.gnome.shell.extensions.logo-menu.gschema.xml mod/schemas/org.gnome.shell.extensions.logo-menu.gschema.xml diff -ru logo-menu-patch-orig/schemas/org.gnome.shell.extensions.logo-menu.gschema.xml logo-menu-patch-mod/schemas/org.gnome.shell.extensions.logo-menu.gschema.xml
--- orig/schemas/org.gnome.shell.extensions.logo-menu.gschema.xml 2026-02-03 17:53:49.513219947 +0200 --- logo-menu-patch-orig/schemas/org.gnome.shell.extensions.logo-menu.gschema.xml 2026-02-03 21:59:13.353462172 +0200
+++ mod/schemas/org.gnome.shell.extensions.logo-menu.gschema.xml 2026-02-03 17:53:49.531021112 +0200 +++ logo-menu-patch-mod/schemas/org.gnome.shell.extensions.logo-menu.gschema.xml 2026-02-03 21:59:13.362611548 +0200
@@ -4,7 +4,7 @@ @@ -4,7 +4,7 @@
<schema path="/org/gnome/shell/extensions/Logo-menu/" id="org.gnome.shell.extensions.logo-menu"> <schema path="/org/gnome/shell/extensions/Logo-menu/" id="org.gnome.shell.extensions.logo-menu">

View file

@ -47,7 +47,11 @@
]; ];
}; };
services.openssh.enable = true; services = {
openssh.enable = true;
gvfs.enable = true;
tumbler.enable = true;
};
networking = { networking = {
useDHCP = lib.mkDefault true; useDHCP = lib.mkDefault true;
@ -62,7 +66,17 @@
enableBashIntegration = lib.mkDefault true; enableBashIntegration = lib.mkDefault true;
}; };
nix-index-database.comma.enable = lib.mkDefault true; nix-index-database.comma.enable = lib.mkDefault true;
thunar = {
enable = true;
plugins = [
pkgs.xfce.thunar-archive-plugin
pkgs.xfce.thunar-media-tags-plugin
pkgs.xfce.thunar-vcs-plugin
pkgs.xfce.thunar-volman
];
};
virt-manager.enable = true; virt-manager.enable = true;
xfconf.enable = true;
}; };
# Optimise the Nix store once a day # Optimise the Nix store once a day

View file

@ -1,8 +1,39 @@
{ lib, pkgs, ... }: { lib, pkgs, ... }:
{ let
# Override Thunar desktop entry to show as "Files".
thunarDesktopOverride = pkgs.makeDesktopItem {
name = "thunar"; # same filename to shadow upstream entry
desktopName = "Files";
genericName = "File Manager";
tryExec = "thunar";
exec = "thunar %U";
icon = "org.xfce.thunar";
categories = [ "Utility" "FileManager" ];
mimeTypes = [ "inode/directory" ];
keywords = [ "folder" "manager" "explorer" "files" ];
startupNotify = true;
startupWMClass = "Thunar";
terminal = false;
comment = "Browse files";
};
# Override Ghostty desktop entry to show as "Terminal".
ghosttyDesktopOverride = pkgs.makeDesktopItem {
name = "com.mitchellh.ghostty";
desktopName = "Terminal";
genericName = "Terminal Emulator";
exec = "ghostty";
icon = "com.mitchellh.ghostty";
categories = [ "System" "TerminalEmulator" "Utility" ];
terminal = false;
comment = "Fast GPU-accelerated terminal";
};
in {
# Baseline system tools available everywhere; users run Home Manager standalone. # Baseline system tools available everywhere; users run Home Manager standalone.
config.environment.systemPackages = lib.mkAfter [ config.environment.systemPackages = lib.mkAfter [
(lib.hiPrio thunarDesktopOverride)
(lib.hiPrio ghosttyDesktopOverride)
pkgs.distrobox pkgs.distrobox
pkgs.distroshelf pkgs.distroshelf
pkgs.dnsmasq pkgs.dnsmasq
@ -35,6 +66,9 @@
pkgs.libnotify pkgs.libnotify
pkgs.micro pkgs.micro
pkgs.mission-center pkgs.mission-center
pkgs.p7zip
pkgs.podman-compose pkgs.podman-compose
pkgs.papirus-icon-theme
pkgs.xdg-utils
]; ];
} }

View file

@ -65,20 +65,20 @@
home.packages = with pkgs; [ home.packages = with pkgs; [
# decibels # default GNOME audio player # decibels # default GNOME audio player
gnome-calendar # default GNOME calendar gnome-calendar # default GNOME calendar
# gnome-contacts # default GNOME contacts # gnome-contacts # default GNOME contacts
firefox # Mozilla web browser firefox # Mozilla web browser
# google-chrome # web browser from Google # google-chrome # web browser from Google
# chromium # open source web browser from Google # chromium # open source web browser from Google
# brave # privacy oriented web browser # brave # privacy oriented web browser
# opera # fast alternative web browser # opera # fast alternative web browser
# vivaldi # powerful and personal web browser # vivaldi # powerful and personal web browser
thunderbird # full-featured Mozilla e-mail client thunderbird # full-featured Mozilla e-mail client
# geary # default GNOME email client # geary # default GNOME email client
ptyxis # container aware GNOME terminal # ptyxis # container aware GNOME terminal
# alacritty # GPU accelerated terminal emulator # alacritty # GPU accelerated terminal emulator
# kitty # GPU accelerated terminal emulator # kitty # GPU accelerated terminal emulator
@ -113,9 +113,8 @@
# you can change the default terminal and editor here # you can change the default terminal and editor here
TERMINAL = "${pkgs.ghostty}/bin/ghostty"; TERMINAL = "${pkgs.ghostty}/bin/ghostty";
DEFAULT_TERMINAL = "${pkgs.ghostty}/bin/ghostty"; DEFAULT_TERMINAL = "${pkgs.ghostty}/bin/ghostty";
EDITOR = "${pkgs.micro}/bin/micro"; EDITOR = "micro";
DBX_CONTAINER_HOME_PREFIX = "$HOME/distrobox"; DBX_CONTAINER_HOME_PREFIX = "$HOME/distrobox";
GDK_BACKEND = "x11 virt-manager"
}; };
} }