Refactor DMS configuration and introduce home-manager integration
- Simplified `default.nix` by removing legacy home-manager settings and delegating them to a new `_private/hm.nix` module for better organization. - Added a new script `dms-restart-once.sh` to handle service restarts and cache management for DMS plugins. - Updated the DMS configuration to streamline the integration of third-party plugins and improve overall modularity.
This commit is contained in:
@@ -207,7 +207,7 @@
|
||||
lib = inputs.nixpkgs.lib;
|
||||
# import-tree default: only .nix, skip paths with /_/ (see
|
||||
# https://import-tree.oeiuwq.com/guides/filtering/ ). filterNot composes AND with that.
|
||||
# Skip /package/, /packages/, and dms/home-manager/ (callPackage + DMS HM colocation).
|
||||
# Skip /package/ and /packages/ (callPackage colocation).
|
||||
# Avoid a global "/home-manager/" filter — it would drop modules/ssh/home-manager/.
|
||||
modulesTree =
|
||||
lib.pipe inputs.import-tree [
|
||||
@@ -217,7 +217,6 @@
|
||||
p:
|
||||
lib.hasInfix "/package/" p
|
||||
|| lib.hasInfix "/packages/" p
|
||||
|| lib.hasInfix "dms/home-manager/" p
|
||||
))
|
||||
(it: it ./modules)
|
||||
];
|
||||
|
||||
+27
-43
@@ -1,3 +1,4 @@
|
||||
# Home Manager wiring for DMS (imported by default.nix; lives under _private/ for import-tree).
|
||||
{
|
||||
inputs,
|
||||
config,
|
||||
@@ -5,10 +6,17 @@
|
||||
lib,
|
||||
osConfig ? { },
|
||||
...
|
||||
}: let
|
||||
}:
|
||||
let
|
||||
home = config.home.homeDirectory;
|
||||
dmsEnabled = lib.attrByPath [ "chiasson" "desktop" "shell" ] null osConfig == "dms";
|
||||
dmsOs = lib.attrByPath [ "chiasson" "desktop" "shells" "dms" ] { } osConfig;
|
||||
hostName = lib.attrByPath [ "networking" "hostName" ] "nixos" osConfig;
|
||||
rebuildCommand =
|
||||
if (dmsOs.rebuildCommand or null) != null then
|
||||
dmsOs.rebuildCommand
|
||||
else
|
||||
[ "sudo" "nixos-rebuild" "switch" "--flake" ".#${hostName}" ];
|
||||
gpuTempEnabled = dmsOs.enableGpuTemp or true;
|
||||
hyprlandEnabled = lib.attrByPath [ "chiasson" "desktop" "hyprland" "enable" ] false osConfig;
|
||||
discordEnabled = lib.attrByPath [ "chiasson" "home" "apps" "discord" "enable" ] false config;
|
||||
@@ -57,12 +65,12 @@
|
||||
"${pkgs.util-linux}/bin/flock"
|
||||
"${pkgs.systemd}/bin/systemctl"
|
||||
]
|
||||
(builtins.readFile ./scripts/dms-restart-once.sh)
|
||||
(builtins.readFile ../scripts/dms-restart-once.sh)
|
||||
);
|
||||
|
||||
jsonFormat = pkgs.formats.json { };
|
||||
dmsConfigDir = "${config.xdg.configHome}/DankMaterialShell";
|
||||
defaultSeedDir = lib.attrByPath [ "chiasson" "desktop" "shells" "dms" "defaultSeedDir" ] null osConfig;
|
||||
defaultSeedDir = dmsOs.defaultSeedDir or null;
|
||||
|
||||
dmsSeedSources =
|
||||
if defaultSeedDir != null then
|
||||
@@ -75,7 +83,7 @@
|
||||
else
|
||||
{
|
||||
"settings.json" = jsonFormat.generate "dms-settings-seed.json" (
|
||||
import ../_private/default-settings.nix {
|
||||
import ./default-settings.nix {
|
||||
inherit lib gpuTempEnabled;
|
||||
extraRightBarWidgets = dmsOs.extraRightBarWidgets or [ ];
|
||||
}
|
||||
@@ -105,7 +113,7 @@
|
||||
${dmsSeedBody}
|
||||
'';
|
||||
|
||||
matugenConfigText = import ../_private/matugen-config.nix {
|
||||
matugenConfigText = import ./matugen-config.nix {
|
||||
inherit
|
||||
lib
|
||||
home
|
||||
@@ -116,7 +124,6 @@
|
||||
;
|
||||
};
|
||||
|
||||
# Directory name must match each plugin's `id` in plugin.json.
|
||||
thirdPartyPlugins = {
|
||||
dankVault = inputs.dms-plugin-dank-vault;
|
||||
calculator = inputs.dms-plugin-calculator;
|
||||
@@ -138,14 +145,14 @@
|
||||
rbwLockToggle = inputs.dms-plugin-rbw-lock-toggle;
|
||||
};
|
||||
|
||||
shipThirdPartyPlugin =
|
||||
id: src:
|
||||
shipPlugin =
|
||||
_id: src:
|
||||
{
|
||||
source = src;
|
||||
onChange = "${dmsRestartOnceScript}";
|
||||
};
|
||||
|
||||
in {
|
||||
in
|
||||
{
|
||||
imports = [
|
||||
inputs.dms.homeModules.dank-material-shell
|
||||
inputs.nix-monitor.homeManagerModules.default
|
||||
@@ -153,15 +160,12 @@ in {
|
||||
|
||||
config = lib.mkIf dmsEnabled (lib.mkMerge [
|
||||
(lib.mkIf (dmsOs.bundleThirdPartyPlugins or true) {
|
||||
xdg.configFile =
|
||||
lib.mapAttrs (id: src: shipThirdPartyPlugin id src) thirdPartyPlugins;
|
||||
xdg.configFile = lib.mapAttrs (_id: src: shipPlugin _id src) thirdPartyPlugins;
|
||||
})
|
||||
{
|
||||
|
||||
# Nix rebuild widget used by DankMaterialShell (via nix-monitor).
|
||||
# Per-host `rebuildCommand` is set in `modules/hosts/<host>/configuration.nix` (`chiasson.desktop.shells.dms`).
|
||||
programs.nix-monitor = {
|
||||
enable = true;
|
||||
inherit rebuildCommand;
|
||||
generationsCommand = [
|
||||
"bash"
|
||||
"-c"
|
||||
@@ -174,60 +178,41 @@ in {
|
||||
kdePackages.kirigami.unwrapped
|
||||
kdePackages.qtmultimedia
|
||||
kdePackages.sonnet
|
||||
# ocrScanner DMS plugin — eng/fra/vie and 120+ langs ship in nixpkgs tessdata.
|
||||
tesseract
|
||||
# ambientSound DMS plugin — mpv playback + socat IPC to mpv socket.
|
||||
mpv
|
||||
socat
|
||||
# dankVault / emojiLauncher / ephemera — Wayland clipboard.
|
||||
wl-clipboard
|
||||
# nixPackageRunner DMS plugin.
|
||||
jq
|
||||
# cavaVisualizer DMS plugin.
|
||||
cava
|
||||
# ephemera DMS plugin — API requests + optional keyring storage.
|
||||
curl
|
||||
libsecret
|
||||
];
|
||||
|
||||
programs.dank-material-shell = {
|
||||
enable = true;
|
||||
|
||||
# homeAssistantMonitor plugin (QtWebSockets) needs QML on DMS's import path, not just home.packages.
|
||||
package = inputs.dms.packages.${pkgs.stdenv.hostPlatform.system}.dms-shell.override {
|
||||
extraQtPackages = with pkgs.kdePackages; [ qtwebsockets ];
|
||||
};
|
||||
|
||||
systemd = {
|
||||
enable = true; # Systemd service for auto-start
|
||||
restartIfChanged = true; # Auto-restart dms.service when dankMaterialShell changes
|
||||
enable = true;
|
||||
restartIfChanged = true;
|
||||
};
|
||||
|
||||
# Core features
|
||||
enableSystemMonitoring = true; # System monitoring widgets (dgop)
|
||||
enableSystemMonitoring = true;
|
||||
dgop.package = inputs.dgop.packages.${pkgs.stdenv.hostPlatform.system}.default;
|
||||
enableVPN = true; # VPN management widget
|
||||
enableDynamicTheming = true; # Wallpaper-based theming (matugen)
|
||||
enableAudioWavelength = true; # Audio visualizer (cava)
|
||||
enableCalendarEvents = false; # Disable calendar integration (khal/ikhal)
|
||||
|
||||
# Leave `session` at {} — non-empty makes HM rewrite session.json every switch and nukes wallpaper/session state.
|
||||
# Leave `settings` at {} — UI-owned settings.json is seeded once on first run (see home.activation below).
|
||||
enableVPN = true;
|
||||
enableDynamicTheming = true;
|
||||
enableAudioWavelength = true;
|
||||
enableCalendarEvents = false;
|
||||
settings = { };
|
||||
session = { };
|
||||
};
|
||||
|
||||
# Detach store symlinks so UI edits survive rebuilds; seed defaults only on a fresh profile.
|
||||
home.activation.dmsSeedConfig = lib.hm.dag.entryAfter [ "writeBoundary" ] "${dmsSeedConfigScript}";
|
||||
|
||||
# matugen won't create missing output_path parents; run before DMS theme generation.
|
||||
systemd.user.services.dms.serviceConfig.ExecStartPre =
|
||||
lib.mkOrder 100 "${ensureMatugenOutputDirsScript}";
|
||||
|
||||
# DMS / matugen custom templates.
|
||||
#
|
||||
# DMS docs (custom templates): https://danklinux.com/docs/dankmaterialshell/application-themes#custom-matugen-templates
|
||||
xdg.configFile."matugen/config.toml".text = matugenConfigText;
|
||||
|
||||
xdg.configFile."matugen/templates/dank-discord.css".source = ../templates/dank-discord.css;
|
||||
xdg.configFile."matugen/templates/hyprland-colors.conf".source = ../templates/hyprland-colors.conf;
|
||||
xdg.configFile."matugen/templates/ohmyposh-theme.omp.json".source = ../templates/ohmyposh-theme.omp.json;
|
||||
@@ -235,7 +220,6 @@ in {
|
||||
../templates/obsidian-minimal-matugen-colors.css;
|
||||
}
|
||||
(lib.mkIf ohMyPoshEnabled {
|
||||
# Same path as matugen `[templates.ohmyposh]`; seeded as a real file by `ensureMatugenOutputDirsScript`.
|
||||
programs.oh-my-posh = {
|
||||
useTheme = lib.mkForce null;
|
||||
configFile = lib.mkForce "${config.xdg.configHome}/oh-my-posh/theme.omp.json";
|
||||
@@ -1,4 +1,4 @@
|
||||
{ inputs, ... }: {
|
||||
{ ... }: {
|
||||
flake.nixosModules.desktopShellDmsOptions = { lib, ... }: {
|
||||
options.chiasson.desktop.shells.dms = {
|
||||
enableGpuTemp = lib.mkOption {
|
||||
@@ -45,29 +45,5 @@
|
||||
};
|
||||
};
|
||||
|
||||
flake.homeManagerModules.desktopShellDms = {
|
||||
lib,
|
||||
osConfig ? { },
|
||||
...
|
||||
}:
|
||||
let
|
||||
cfg = lib.attrByPath [ "chiasson" "desktop" "shells" "dms" ] { } osConfig;
|
||||
selectedShell = lib.attrByPath [ "chiasson" "desktop" "shell" ] null osConfig;
|
||||
dmsEnabled = selectedShell == "dms";
|
||||
hostName = lib.attrByPath [ "networking" "hostName" ] "nixos" osConfig;
|
||||
rebuildCommand =
|
||||
if (cfg.rebuildCommand or null) != null then
|
||||
cfg.rebuildCommand
|
||||
else
|
||||
[ "sudo" "nixos-rebuild" "switch" "--flake" ".#${hostName}" ];
|
||||
in
|
||||
{
|
||||
imports = [
|
||||
./home-manager/default.nix
|
||||
];
|
||||
|
||||
config = lib.mkIf dmsEnabled {
|
||||
programs.nix-monitor.rebuildCommand = rebuildCommand;
|
||||
};
|
||||
};
|
||||
flake.homeManagerModules.desktopShellDms = import ./_private/hm.nix;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user