From 8f15bf0e0c1bdd8d10a8046beec222052694e7eb Mon Sep 17 00:00:00 2001 From: Wroclaw Date: Wed, 29 May 2024 04:46:18 +0200 Subject: [PATCH] dconf: create generic module and use it no more cringe function calling, yay --- nix-os/dconf-common.nix | 321 ++++++++++++++++--------------- nix-os/desktopManagers/gnome.nix | 49 +++-- nix-os/displayManagers/gdm.nix | 23 +-- nix-os/generic/dconf.nix | 46 +++++ 4 files changed, 244 insertions(+), 195 deletions(-) create mode 100644 nix-os/generic/dconf.nix diff --git a/nix-os/dconf-common.nix b/nix-os/dconf-common.nix index 1f03a56..2993f98 100644 --- a/nix-os/dconf-common.nix +++ b/nix-os/dconf-common.nix @@ -1,163 +1,166 @@ -# This file is not a NixOS system module {config, lib, pkgs, ... }: -selection: -let - settings = with lib.gvariant; { - "org/gnome/desktop/background" = { - picture-options = "zoom"; - picture-uri = "file://${../media/wallpaper.png}"; - picture-uri-dark = "file://${../media/wallpaper.png}"; +{ + imports = [ + ./generic/dconf.nix + ]; + + config = { + proot.dconf.rules = with lib.gvariant; { + "org/gnome/desktop/background" = { + picture-options = "zoom"; + picture-uri = "file://${../media/wallpaper.png}"; + picture-uri-dark = "file://${../media/wallpaper.png}"; + }; + + "org/gnome/desktop/interface" = { + clock-show-date = true; + clock-show-seconds = true; + clock-show-weekday = true; + color-scheme = "prefer-dark"; + cursor-theme = "GoogleDot-White"; + }; + + "org/gnome/desktop/media-handling" = { + automount = false; + }; + + "org/gnome/desktop/peripherals/mouse" = { + accel-profile = "flat"; + }; + + "org/gnome/desktop/sound" = { + allow-volume-above-100-percent = true; + }; + + "org/gnome/desktop/wm/preferences" = { + button-layout = "appmenu:close"; + resize-with-right-button = true; + }; + + "org/gnome/mutter" = { + dynamic-workspaces = true; + workspaces-only-on-primary = true; + }; + + "org/gnome/SessionManager" = { + logout-prompt = false; + }; + + "org/gnome/settings-daemon/plugins/power" = { + power-button-action = "notning"; + sleep-inactive-ac-type = "nothing"; + }; + + "org/gnome/shell" = { + enabled-extensions = [ + "drive-menu@gnome-shell-extensions.gcampax.github.com" + "pop-shell@system76.com" + "workspace-indicator@gnome-shell-extensions.gcampax.github.com" + "Vitals@CoreCoding.com" + "trayIconsReloaded@selfmade.pl" + "places-menu@gnome-shell-extensions.gcampax.github.com" + "apps-menu@gnome-shell-extensions.gcampax.github.com" + "top-bar-organizer@julian.gse.jsts.xyz" + "color-picker@tuberry" + ]; + favorite-apps = [ + (if builtins.elem pkgs.kitty config.environment.systemPackages then + "kitty.desktop" + else none) + "vivaldi-stable.desktop" + "code.desktop" + "org.gnome.Nautilus.desktop" + (if config.programs.steam.enable then + "steam.desktop" + else none) + "pavucontrol.desktop" + ]; + }; + + "org/gnome/shell/app-switcher" = { + current-workspace-only = false; + }; + + "org/gnome/shell/extensions/color-picker" = { + color-picker-shortcut = ["c"]; + enable-shortcut = true; + enable-systray = false; + menu-key = ""; + notify-style = mkUint32 1; + preview-style = mkUint32 0; + }; + + "org/gnome/shell/extensions/pop-shell" = { + active-hint = true; + active-hint-border-radius = mkUint32 1; + gap-inner = mkUint32 2; + gap-outer = mkUint32 1; + show-skip-taskbar = true; + show-title = true; + smart-gaps = false; + snap-to-grid = false; + tile-by-default = true; + }; + + "org/gnome/shell/extensions/top-bar-organizer" = { + center-box-order = ["dateMenu"]; + left-box-order = ["activities" "apps-menu" "places-menu" "vitalsMenu"]; + right-box-order = ["TrayIconsReloaded" "workspace-indicator" "pop-shell" "color-picker@tuberry" "drive-menu" "screenRecording" "screenSharing" "dwellClick" "a11y" "keyboard" "quickSettings"]; + }; + + "org/gnome/shell/extensions/trayIconsReloaded" = { + icon-brightness = mkInt32 0; + icon-contrast = mkInt32 0; + icon-margin-horizontal = mkInt32 0; + icon-margin-vertical = mkInt32 0; + icon-padding-horizontal = mkInt32 4; + icon-padding-vertical = mkInt32 0; + icon-saturation = mkInt32 0; + icon-size = mkInt32 16; + icons-limit = mkInt32 16; + invoke-to-workspace = true; + position-weight = mkInt32 0; + tray-margin-left = mkInt32 0; + tray-margin-right = mkInt32 0; + }; + + "org/gnome/shell/extensions/vitals" = { + hide-icons = false; + hot-sensors = ["_processor_usage_" "_memory_allocated_"]; + memory-measurement = mkInt32 1; + update-time = mkInt32 2; + use-higher-precision = true; + }; + + "org/gnome/shell/keybindings" = { + show-screenshot-ui = ["Print" "S"]; + }; + + "org/gnome/desktop/default-applications/terminal" = + if builtins.elem pkgs.kitty config.environment.systemPackages then { + exec = "kitty"; + exec-arg = ""; + } else null; + + "org/gnome/settings-daemon/plugins/media-keys" = { + custom-keybindings = [ + ( + if builtins.elem pkgs.kitty config.environment.systemPackages then + "/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0/" + else null + ) + ]; + help = mkEmptyArray "s"; + screensaver = ["l"]; + }; + + "org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0" = + if builtins.elem pkgs.kitty config.environment.systemPackages then { + binding = "t"; + command = "kitty"; + name = "Terminal"; + } else null; }; - - "org/gnome/desktop/interface" = { - clock-show-date = true; - clock-show-seconds = true; - clock-show-weekday = true; - color-scheme = "prefer-dark"; - cursor-theme = "GoogleDot-White"; - }; - - "org/gnome/desktop/media-handling" = { - automount = false; - }; - - "org/gnome/desktop/peripherals/mouse" = { - accel-profile = "flat"; - }; - - "org/gnome/desktop/sound" = { - allow-volume-above-100-percent = true; - }; - - "org/gnome/desktop/wm/preferences" = { - button-layout = "appmenu:close"; - resize-with-right-button = true; - }; - - "org/gnome/mutter" = { - dynamic-workspaces = true; - workspaces-only-on-primary = true; - }; - - "org/gnome/SessionManager" = { - logout-prompt = false; - }; - - "org/gnome/settings-daemon/plugins/power" = { - power-button-action = "notning"; - sleep-inactive-ac-type = "nothing"; - }; - - "org/gnome/shell" = { - enabled-extensions = [ - "drive-menu@gnome-shell-extensions.gcampax.github.com" - "pop-shell@system76.com" - "workspace-indicator@gnome-shell-extensions.gcampax.github.com" - "Vitals@CoreCoding.com" - "trayIconsReloaded@selfmade.pl" - "places-menu@gnome-shell-extensions.gcampax.github.com" - "apps-menu@gnome-shell-extensions.gcampax.github.com" - "top-bar-organizer@julian.gse.jsts.xyz" - "color-picker@tuberry" - ]; - favorite-apps = [ - (if builtins.elem pkgs.kitty config.environment.systemPackages then - "kitty.desktop" - else none) - "vivaldi-stable.desktop" - "code.desktop" - "org.gnome.Nautilus.desktop" - (if config.programs.steam.enable then - "steam.desktop" - else none) - "pavucontrol.desktop" - ]; - }; - - "org/gnome/shell/app-switcher" = { - current-workspace-only = false; - }; - - "org/gnome/shell/extensions/color-picker" = { - color-picker-shortcut = ["c"]; - enable-shortcut = true; - enable-systray = false; - menu-key = ""; - notify-style = mkUint32 1; - preview-style = mkUint32 0; - }; - - "org/gnome/shell/extensions/pop-shell" = { - active-hint = true; - active-hint-border-radius = mkUint32 1; - gap-inner = mkUint32 2; - gap-outer = mkUint32 1; - show-skip-taskbar = true; - show-title = true; - smart-gaps = false; - snap-to-grid = false; - tile-by-default = true; - }; - - "org/gnome/shell/extensions/top-bar-organizer" = { - center-box-order = ["dateMenu"]; - left-box-order = ["activities" "apps-menu" "places-menu" "vitalsMenu"]; - right-box-order = ["TrayIconsReloaded" "workspace-indicator" "pop-shell" "color-picker@tuberry" "drive-menu" "screenRecording" "screenSharing" "dwellClick" "a11y" "keyboard" "quickSettings"]; - }; - - "org/gnome/shell/extensions/trayIconsReloaded" = { - icon-brightness = mkInt32 0; - icon-contrast = mkInt32 0; - icon-margin-horizontal = mkInt32 0; - icon-margin-vertical = mkInt32 0; - icon-padding-horizontal = mkInt32 4; - icon-padding-vertical = mkInt32 0; - icon-saturation = mkInt32 0; - icon-size = mkInt32 16; - icons-limit = mkInt32 16; - invoke-to-workspace = true; - position-weight = mkInt32 0; - tray-margin-left = mkInt32 0; - tray-margin-right = mkInt32 0; - }; - - "org/gnome/shell/extensions/vitals" = { - hide-icons = false; - hot-sensors = ["_processor_usage_" "_memory_allocated_"]; - memory-measurement = mkInt32 1; - update-time = mkInt32 2; - use-higher-precision = true; - }; - - "org/gnome/shell/keybindings" = { - show-screenshot-ui = ["Print" "S"]; - }; - - "org/gnome/desktop/default-applications/terminal" = - if builtins.elem pkgs.kitty config.environment.systemPackages then { - exec = "kitty"; - exec-arg = ""; - } else null; - - "org/gnome/settings-daemon/plugins/media-keys" = { - custom-keybindings = [ - ( - if builtins.elem pkgs.kitty config.environment.systemPackages then - "/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0/" - else null - ) - ]; - help = mkEmptyArray "s"; - screensaver = ["l"]; - }; - - "org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0" = - if builtins.elem pkgs.kitty config.environment.systemPackages then { - binding = "t"; - command = "kitty"; - name = "Terminal"; - } else null; }; -in -lib.filterAttrs (n: v: builtins.elem n selection) settings \ No newline at end of file +} diff --git a/nix-os/desktopManagers/gnome.nix b/nix-os/desktopManagers/gnome.nix index d64b100..14c19c6 100644 --- a/nix-os/desktopManagers/gnome.nix +++ b/nix-os/desktopManagers/gnome.nix @@ -1,8 +1,9 @@ -{pkgs, ... } @ moduleArgs: +{pkgs, ... }: { imports = [ ../unstable-packages.nix + ../dconf-common.nix ]; config = { services.xserver.enable = true; @@ -10,30 +11,28 @@ # environment.sessionVariables.NIXOS_OZONE_WL = "1"; - programs.dconf.profiles.user.databases = [{ - settings = import ../dconf-common.nix moduleArgs [ - "org/gnome/desktop/background" - "org/gnome/desktop/interface" - "org/gnome/desktop/media-handling" - "org/gnome/desktop/peripherals/mouse" - "org/gnome/desktop/sound" - "org/gnome/desktop/wm/preferences" - "org/gnome/mutter" - "org/gnome/SessionManager" - "org/gnome/settings-daemon/plugins/power" - "org/gnome/shell" - "org/gnome/shell/app-switcher" - "org/gnome/shell/extensions/color-picker" - "org/gnome/shell/extensions/pop-shell" - "org/gnome/shell/extensions/top-bar-organizer" - "org/gnome/shell/extensions/trayIconsReloaded" - "org/gnome/shell/extensions/vitals" - "org/gnome/shell/keybindings" - "org/gnome/desktop/default-applications/terminal" - "org/gnome/settings-daemon/plugins/media-keys" - "org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0" - ]; - }]; + proot.dconf.profiles.user.rulesToApply = [ + "org/gnome/desktop/background" + "org/gnome/desktop/interface" + "org/gnome/desktop/media-handling" + "org/gnome/desktop/peripherals/mouse" + "org/gnome/desktop/sound" + "org/gnome/desktop/wm/preferences" + "org/gnome/mutter" + "org/gnome/SessionManager" + "org/gnome/settings-daemon/plugins/power" + "org/gnome/shell" + "org/gnome/shell/app-switcher" + "org/gnome/shell/extensions/color-picker" + "org/gnome/shell/extensions/pop-shell" + "org/gnome/shell/extensions/top-bar-organizer" + "org/gnome/shell/extensions/trayIconsReloaded" + "org/gnome/shell/extensions/vitals" + "org/gnome/shell/keybindings" + "org/gnome/desktop/default-applications/terminal" + "org/gnome/settings-daemon/plugins/media-keys" + "org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0" + ]; environment.gnome.excludePackages = with pkgs; with pkgs.gnome; [ baobab diff --git a/nix-os/displayManagers/gdm.nix b/nix-os/displayManagers/gdm.nix index f040d1c..f3e4cbc 100644 --- a/nix-os/displayManagers/gdm.nix +++ b/nix-os/displayManagers/gdm.nix @@ -1,6 +1,9 @@ -{pkgs, ... } @ moduleArgs: +{pkgs, ... }: { + imports = [ + ../dconf-common.nix + ]; config = { services.xserver.displayManager.gdm = { enable = true; @@ -8,18 +11,16 @@ autoSuspend = false; }; - programs.dconf.profiles.gdm.databases = [{ - settings = import ../dconf-common.nix moduleArgs [ - "org/gnome/desktop/interface" - "org/gnome/desktop/peripherals/mouse" - "org/gnome/desktop/sound" - "org/gnome/settings-daemon/plugins/power" - "org/gnome/shell/keybindings" - ]; - }]; + proot.dconf.profiles.gdm.rulesToApply = [ + "org/gnome/desktop/interface" + "org/gnome/desktop/peripherals/mouse" + "org/gnome/desktop/sound" + "org/gnome/settings-daemon/plugins/power" + "org/gnome/shell/keybindings" + ]; environment.systemPackages = with pkgs; [ google-cursor ]; }; -} \ No newline at end of file +} diff --git a/nix-os/generic/dconf.nix b/nix-os/generic/dconf.nix new file mode 100644 index 0000000..dfcdc04 --- /dev/null +++ b/nix-os/generic/dconf.nix @@ -0,0 +1,46 @@ +{ config, lib, pkgs, options, ... }: + +# proot.dconf.rules +# proot.dconf.profiles..rulesToApply +# proot.dconf.profiles..extraRules +let + cfg = config.proot.dconf; + profileOpts = lib.types.submodule { + options = { + rulesToApply = lib.mkOption { + type = lib.types.listOf lib.types.str; + default = lib.attrNames cfg.rules; + description = lib.mdDoc "A list of rules keys to apply for profile"; + }; + extraRules = lib.mkOption { + type = lib.types.attrs; + default = {}; + description = lib.mdDoc "An attrset of additional dconf rules to apply ontop of selected"; + }; + }; + }; + + mapper = _: value: { + databases = lib.singleton { + settings = lib.filterAttrs (key: _: lib.elem key value.rulesToApply) cfg.rules // value.extraRules; + }; + }; +in +{ + options.proot.dconf = { + rules = lib.mkOption { + type = lib.types.attrs; + default = {}; + description = lib.mdDoc "An attrset of dconf rules to pull from"; + }; + profiles = lib.mkOption { + type = lib.types.attrsOf profileOpts; + default = {}; + description = lib.mdDoc "An attret of profiles to create, with pulled rules"; + }; + }; + + config = { + programs.dconf.profiles = lib.mapAttrs mapper cfg.profiles; + }; +}