{ ... }: { flake.nixosModules.desktopShellDmsOptions = { lib, ... }: { options.chiasson.desktop.shells.dms = { enableGpuTemp = lib.mkOption { type = lib.types.bool; default = true; description = "GPU temp in DMS bar."; }; obsidianVaults = lib.mkOption { type = lib.types.listOf lib.types.str; default = [ ]; example = [ "/mnt/zimaos/Obsidian/Home/.obsidian" ]; description = "Vault `.obsidian/` dirs; matugen writes `/snippets/matugen.css`."; }; extraRightBarWidgets = lib.mkOption { type = lib.types.listOf lib.types.attrs; default = [ ]; description = "Extra right-bar widgets merged into the first-run DMS settings seed."; }; rebuildCommand = lib.mkOption { type = lib.types.nullOr (lib.types.listOf lib.types.str); default = null; example = [ "sudo" "nixos-rebuild" "switch" "--flake" ".#14900k" ]; description = "Command used by DMS nix-monitor widget for rebuild actions."; }; defaultSeedDir = lib.mkOption { type = lib.types.nullOr lib.types.path; default = null; example = ./dms-defaults; description = '' Host-specific first-run DMS config seed directory. When set, copies `settings.json` (required) and `plugin_settings.json` (optional) from this directory into `~/.config/DankMaterialShell/` on fresh profiles. Replaces the bundled `default-settings.nix` template for `settings.json`. ''; }; bundleThirdPartyPlugins = lib.mkOption { type = lib.types.bool; default = true; description = '' Install bundled DMS plugins from flake inputs (third-party + chiasson). Disable individual plugins in DMS settings; set this to false to skip all bundled plugins. ''; }; }; }; flake.homeManagerModules.desktopShellDms = import ./_private/hm.nix; # DMS IPC commands shared between Niri and Hyprland keybind tables. # Defines flake.lib.dmsIpcBinds so each compositor formats the same # command string in its native shape — Niri attrs vs Hyprland string-list. # Adding a new DMS keybind requires editing this file plus the # per-compositor bind layout, not the command string. flake.lib.dmsIpcBinds = { spotlight = "dms ipc call spotlight toggle"; clipboard = "dms ipc call clipboard toggle"; notepad = "dms ipc call notepad toggle"; notifications = "dms ipc call notifications toggle"; processlist = "dms ipc call processlist toggle"; # Hyprland prefers focusOrToggle (window-aware); niri subscribes to toggle. processlistFocus = "dms ipc call processlist focusOrToggle"; settingsFocus = "dms ipc call settings focusOrToggle"; barToggle = ''dms ipc call bar toggle name "Main Bar"; dms ipc call bar toggle name "Bar 2"''; barToggleBar2 = ''dms ipc call bar toggle name "Bar 2"''; ephemera = "dms ipc call ephemera toggle"; wallpaperCarousel = "dms ipc call wallpaperCarousel toggle"; lock = "dms ipc call lock lock"; }; }