Commit 972f461

HPCesia <me@hpcesia.com>
2026-10-12 13:09:03
noctalia: add declarative plugins
Assisted-by: crush:glm-5.3
1 parent a4a376f
Changed files (2)
modules
desktop
noctalia
modules/desktop/noctalia/default.nix
@@ -1,4 +1,4 @@
-{
+{den, ...}: {
   den.aspects.desktop.noctalia = {
     persistHome = {config, ...}: {
       directories = [
@@ -7,13 +7,50 @@
     };
 
     hjem = {
+      host,
       user,
       pkgs,
       lib,
       ...
     }: let
+      officialPlugins = pkgs.fetchFromGitHub {
+        owner = "noctalia-dev";
+        repo = "official-plugins";
+        rev = "9aec34181e46789b281263942092ac552f661d1a";
+        hash = "sha256-0LcRrw6iA30dva7ubY7y3aZpOkqfufGvCtWW1V33cnA=";
+      };
+      communityPlugins = pkgs.fetchFromGitHub {
+        owner = "noctalia-dev";
+        repo = "community-plugins";
+        rev = "093661f688847ffd7a47d3fdfa39c9b6f63a3a36";
+        hash = "sha256-DVlvf1bjUia35aOo7M7LKQxTS+xTkF0OpqzJHK3qjWk=";
+      };
+
+      plugins =
+        {
+          "noctalia/kaomoji".src = "${officialPlugins}/kaomoji";
+        }
+        // (lib.optionalAttrs
+          (host.hasAspect den.aspects.desktop.app.kdeconnect)
+          {
+            "icefish/phone-connect" = {
+              src = "${communityPlugins}/phone-connect";
+              systemDeps = [pkgs.glib.bin pkgs.sshfs];
+            };
+          });
+
+      pluginDir = pkgs.linkFarm "noctalia-plugins" (
+        lib.mapAttrsToList
+        (id: p: {
+          name = lib.baseNameOf id;
+          path = p.src;
+        })
+        plugins
+      );
     in {
-      packages = [pkgs.noctalia];
+      packages =
+        [pkgs.noctalia]
+        ++ lib.concatLists (lib.mapAttrsToList (_: p: p.systemDeps or []) plugins);
 
       xdg.config.files."noctalia/config.toml" = {
         generator = value: let
@@ -39,6 +76,20 @@
               transparency_mode = "glass";
             };
           };
+          plugins = {
+            enabled = lib.attrNames plugins;
+            auto_update = "none";
+            source = [
+              {
+                name = "nix";
+                kind = "path";
+                location = "${pluginDir}";
+              }
+            ];
+          };
+          plugin_settings = {
+            "icefish/phone-connect".language = "zh-Hans";
+          };
           bar = {
             order = ["default"];
             default = {
@@ -46,7 +97,12 @@
               margin_edge = 8;
               margin_ends = 8;
               radius = 14;
-              start = ["launcher" "privacy" "media"];
+              start = [
+                "launcher"
+                "phone-connect"
+                "privacy"
+                "media"
+              ];
               center = ["workspaces"];
               end = [
                 "tray"
@@ -95,6 +151,10 @@
             tray = {drawer = true;};
             volume.show_label = false;
             workspaces.hide_when_empty = true;
+            phone-connect = {
+              capsule = true;
+              type = "icefish/phone-connect:bar";
+            };
           };
         };
       };
README.md
@@ -46,6 +46,7 @@ Copyright (c) 2026 HPCesia.
 
 - [chlorine/shosai](https://src.chlo.is/chlorine/shosai)
 - [drupol/infra](https://github.com/drupol/infra)
+- [hlissner/dotfiles](https://github.com/hlissner/dotfiles)
 - [MidAutumnMoon/TaysiTsuki](https://github.com/MidAutumnMoon/TaysiTsuki)
 - [ryan4yin/nix-config](https://github.com/ryan4yin/nix-config)
 - [sini/nix-config](https://github.com/sini/nix-config)