feat: simplified gnome configurations with more options

This commit is contained in:
Leyla Becker 2025-10-11 23:26:24 -05:00
parent 32c7086394
commit c81fa77a29
3 changed files with 61 additions and 20 deletions

View file

@ -1,5 +1,4 @@
{ {
pkgs,
osConfig, osConfig,
lib, lib,
... ...
@ -10,9 +9,11 @@
colorScheme = "prefer-dark"; colorScheme = "prefer-dark";
accentColor = "slate"; accentColor = "slate";
extraWindowControls = true; extraWindowControls = true;
extensions = [ extensions = {
pkgs.gnomeExtensions.dash-to-panel dash-to-panel = {
]; enable = true;
};
};
} }
(lib.mkIf (osConfig.networking.hostName == "horizon") { (lib.mkIf (osConfig.networking.hostName == "horizon") {

View file

@ -1,31 +1,36 @@
{pkgs, ...}: { {...}: {
config = { config = {
gnome = { gnome = {
extraWindowControls = true; extraWindowControls = true;
colorScheme = "prefer-dark"; colorScheme = "prefer-dark";
clockFormat = "24h"; clockFormat = "24h";
extensions = [ extensions = {
pkgs.gnomeExtensions.dash-to-dock dash-to-dock = {
]; enable = true;
options = {
"dock-position" = "LEFT";
"intellihide-mode" = "ALL_WINDOWS";
"show-trash" = false;
"require-pressure-to-show" = false;
"show-mounts" = false;
};
};
};
hotkeys = { hotkeys = {
"Open Terminal" = { "Open Terminal" = {
binding = "<Super>t"; binding = "<Super>t";
command = "kgx"; command = "kgx";
}; };
"Open Firefox" = {
binding = "<Super>f";
command = "firefox";
};
}; };
}; };
dconf = { dconf = {
enable = true; enable = true;
settings = { settings = {
"org/gnome/shell/extensions/dash-to-dock" = {
"dock-position" = "LEFT";
"intellihide-mode" = "ALL_WINDOWS";
"show-trash" = false;
"require-pressure-to-show" = false;
"show-mounts" = false;
};
"org/gnome/shell" = { "org/gnome/shell" = {
favorite-apps = ["org.gnome.Nautilus.desktop" "firefox.desktop" "codium.desktop" "steam.desktop" "org.gnome.Console.desktop"]; favorite-apps = ["org.gnome.Nautilus.desktop" "firefox.desktop" "codium.desktop" "steam.desktop" "org.gnome.Console.desktop"];
# app-picker-layout = # app-picker-layout =

View file

@ -1,8 +1,14 @@
{ {
lib, lib,
config, config,
pkgs,
... ...
}: { }: let
enabledExtensions =
[]
++ lib.optional config.gnome.extensions.dash-to-dock.enable pkgs.gnomeExtensions.dash-to-dock
++ lib.optional config.gnome.extensions.dash-to-panel.enable pkgs.gnomeExtensions.dash-to-panel;
in {
options.gnome = { options.gnome = {
extraWindowControls = lib.mkEnableOption "Should we add back in the minimize and maximize window controls?"; extraWindowControls = lib.mkEnableOption "Should we add back in the minimize and maximize window controls?";
clockFormat = lib.mkOption { clockFormat = lib.mkOption {
@ -34,7 +40,7 @@
]; ];
default = "blue"; default = "blue";
}; };
extensions = lib.mkOption { extraExtensions = lib.mkOption {
type = lib.types.listOf lib.types.package; type = lib.types.listOf lib.types.package;
default = []; default = [];
description = "The set of extensions to install and enable in the user environment."; description = "The set of extensions to install and enable in the user environment.";
@ -74,16 +80,36 @@
default = {}; default = {};
description = "GNOME experimental features to enable"; description = "GNOME experimental features to enable";
}; };
extensions = {
dash-to-dock = {
enable = lib.mkEnableOption "Dash to Dock extension";
options = lib.mkOption {
type = lib.types.nullOr lib.types.attrs;
default = null;
description = "Dash to Dock configuration options. If null, no custom configuration will be applied.";
};
};
dash-to-panel = {
enable = lib.mkEnableOption "Dash to Panel extension";
options = lib.mkOption {
type = lib.types.nullOr lib.types.attrs;
default = null;
description = "Dash to Panel configuration options. If null, no custom configuration will be applied.";
};
};
};
}; };
config = { config = {
home.packages = config.gnome.extensions; home.packages = config.gnome.extraExtensions ++ enabledExtensions;
dconf = { dconf = {
settings = lib.mkMerge [ settings = lib.mkMerge [
{ {
"org/gnome/shell" = { "org/gnome/shell" = {
disable-user-extensions = false; # enables user extensions disable-user-extensions = false; # enables user extensions
enabled-extensions = builtins.map (extension: extension.extensionUuid) config.gnome.extensions; enabled-extensions = builtins.map (extension: extension.extensionUuid) config.gnome.extraExtensions;
}; };
"org/gnome/desktop/wm/preferences".button-layout = lib.mkIf config.gnome.extraWindowControls ":minimize,maximize,close"; "org/gnome/desktop/wm/preferences".button-layout = lib.mkIf config.gnome.extraWindowControls ":minimize,maximize,close";
@ -119,6 +145,15 @@
) )
) )
) )
# Extension configurations
(lib.mkIf (config.gnome.extensions.dash-to-dock.enable && config.gnome.extensions.dash-to-dock.options != null) {
"org/gnome/shell/extensions/dash-to-dock" = config.gnome.extensions.dash-to-dock.options;
})
(lib.mkIf (config.gnome.extensions.dash-to-panel.enable && config.gnome.extensions.dash-to-panel.options != null) {
"org/gnome/shell/extensions/dash-to-panel" = config.gnome.extensions.dash-to-panel.options;
})
]; ];
}; };
}; };