main
  1{
  2  den.aspects.desktop.noctalia = {
  3    persistHome = {config, ...}: {
  4      directories = [
  5        "${config.xdg.state.directory}/noctalia"
  6      ];
  7    };
  8
  9    hjem = {
 10      user,
 11      pkgs,
 12      lib,
 13      ...
 14    }: let
 15    in {
 16      packages = [pkgs.noctalia];
 17
 18      xdg.config.files."noctalia/config.toml" = {
 19        generator = value: let
 20          rawConfig = (pkgs.formats.toml {}).generate "noctalia-config.toml" value;
 21        in
 22          pkgs.runCommand "noctalia-config-validated.toml" {} ''
 23            ${lib.getExe pkgs.noctalia} config validate ${rawConfig}
 24            cp ${rawConfig} $out
 25          '';
 26        value = {
 27          battery.warning_threshold = 20;
 28          notification.layer = "overlay";
 29          osd = {
 30            background_opacity = 0.9;
 31            position_vertical = "top_right";
 32          };
 33          desktop_widgets.enabled = false;
 34          shell = {
 35            avatar_path = lib.mkIf (user.identity.avatar != null) user.identity.avatar;
 36            lang = "zh_CN.UTF-8";
 37            panel = {
 38              open_near_click_control_center = true;
 39              transparency_mode = "glass";
 40            };
 41          };
 42          bar = {
 43            order = ["default"];
 44            default = {
 45              background_opacity = 0.9;
 46              margin_edge = 8;
 47              margin_ends = 8;
 48              radius = 14;
 49              start = ["launcher" "privacy" "media"];
 50              center = ["workspaces"];
 51              end = [
 52                "tray"
 53                "notifications"
 54                "clipboard"
 55                "network"
 56                "bluetooth"
 57                "volume"
 58                "brightness"
 59                "battery"
 60                "clock"
 61                "control-center"
 62              ];
 63            };
 64          };
 65          widget = {
 66            battery = {
 67              display_mode = "graphic";
 68              show_label = false;
 69            };
 70            brightness.show_label = false;
 71            clock = {
 72              capsule = true;
 73              capsule_opacity = 0.9;
 74              capsule_padding = 10.0;
 75              format = "{:%Y-%m-%d %H:%M}";
 76            };
 77            control-center = {
 78              capsule = true;
 79              capsule_opacity = 0.9;
 80              custom_image = "${pkgs.nixos-icons}/share/icons/hicolor/64x64/apps/nix-snowflake.png";
 81            };
 82            launcher = {
 83              capsule = true;
 84              capsule_opacity = 0.9;
 85            };
 86            media = {
 87              capsule = true;
 88              capsule_opacity = 0.9;
 89            };
 90            network.show_label = false;
 91            privacy = {
 92              capsule = true;
 93              capsule_opacity = 0.9;
 94            };
 95            tray = {drawer = true;};
 96            volume.show_label = false;
 97            workspaces.hide_when_empty = true;
 98          };
 99        };
100      };
101    };
102  };
103
104  den.aspects.desktop.noctalia.themes = {
105    catppuccin = {
106      hjem = {pkgs, ...}: {
107        xdg.config.files."noctalia/config.toml".value = {
108          theme = {
109            source = "builtin";
110            builtin = "Catppuccin";
111          };
112          wallpaper.default = pkgs.nixos-artwork.wallpapers.catppuccin-mocha;
113        };
114      };
115    };
116  };
117}