Commit 3056297

HPCesia <me@hpcesia.com>
2026-07-07 16:01:58
WIP: Add desktop applications
1 parent 082a869
Changed files (3)
modules
desktop
users
hpcesia
modules/desktop/app/mpv.nix
@@ -0,0 +1,89 @@
+{den, ...}: {
+  den.aspects.desktop.app.mpv = {
+    cacheHome = {config, ...}: {
+      directories = [
+        "${config.xdg.stateHome}/mpv"
+      ];
+    };
+
+    homeManager = {pkgs, ...}: {
+      programs.mpv = {
+        enable = true;
+        defaultProfiles = ["gpu-hq"];
+        scripts = with pkgs.mpvScripts; [
+          mpris
+          uosc
+          thumbfast
+          autoload
+          reload
+          mpv-playlistmanager
+        ];
+        config = {
+          vo = "gpu-next";
+          hwdec = "auto-copy";
+          scale = "ewa_lanczossharp";
+          # --- 动态范围与色彩管理 --- #
+          target-colorspace-hint = "auto";
+          tone-mapping = "hable";
+          dither = "fruit";
+          dither-depth = "auto";
+          # --- 音频质量配置 --- #
+          ao = "pipewire";
+          audio-resample-filter-size = 64;
+          audio-resample-phase-shift = 10;
+          # --- 字幕配置 --- #
+          sub-auto = "fuzzy";
+          sub-bold = "yes";
+          sub-outline-size = 2.25;
+          sub-outline-color = "#111111";
+          sub-color = "#FEFEFE";
+          sub-font-size = "36";
+          sub-use-margins = "yes";
+          sub-ass-override = "force";
+          # --- 用户体验 --- #
+          save-position-on-quit = true;
+          keep-open = "yes";
+          osd-bar = "no"; # use uosc
+          # 音量控制
+          volume = 80;
+          volume-max = 120;
+          # OSD 显示
+          osd-duration = 2500;
+          osd-font-size = 32;
+          # 截图设置
+          screenshot-format = "png";
+          screenshot-dir = "$XDG_PICTURES_DIR/mpv";
+          screenshot-template = "%F-%P";
+        };
+
+        scriptOpts.uosc = {
+          languages = "slang,zh-hans";
+        };
+      };
+
+      xdg.mimeApps.defaultApplications = {
+        "audio/*" = ["mpv.desktop"];
+        "video/*" = ["mpv.desktop"];
+      };
+    };
+  };
+
+  den.aspects.desktop.app.mpv.themes = {
+    catppuccin = {
+      homeManager = {pkgs, ...}: let
+        catppuccin-mpv = pkgs.fetchFromGitHub {
+          owner = "catppuccin";
+          repo = "mpv";
+          rev = "08e90daf511eee2c10c98f0031b51bb9de240d60";
+          hash = "sha256-oUheJNWk2R6gNEmkK8H6PWX0iofx2KMGDoFWtnr420A=";
+        };
+      in {
+        programs.mpv = {
+          config = {
+            include = "${catppuccin-mpv}/mocha/mauve.conf";
+          };
+        };
+      };
+    };
+  };
+}
modules/desktop/app/obs-studio.nix
@@ -0,0 +1,37 @@
+{den, ...}: {
+  den.aspects.desktop.app.obs-studio = {
+    cacheHome = {config, ...}: {
+      directories = [
+        "${config.xdg.stateHome}/obs-studio"
+      ];
+    };
+
+    homeManager = {pkgs, ...}: {
+      home.packages = with pkgs; [
+        obs-studio
+      ];
+
+      xdg.configFile."obs-studio/plugins".source = pkgs.symlinkJoin {
+        name = "obs-studio-plugins";
+        paths = with pkgs.obs-studio-plugins; [
+          input-overlay
+        ];
+      };
+    };
+  };
+
+  den.aspects.desktop.app.obs-studio.themes = {
+    catppuccin = {
+      homeManager = {pkgs, ...}: let
+        catppuccin-obs = pkgs.fetchFromGitHub {
+          owner = "catppuccin";
+          repo = "obs";
+          rev = "054a297d303a5bac4f1652a13b17d78a13201c0e";
+          hash = "sha256-zFg7dgxLIK3K1KpLdEgphH2JpdMwVTovr+oKiAqdLEE=";
+        };
+      in {
+        xdg.configFile."obs-studio/themes".source = "${catppuccin-obs}/themes";
+      };
+    };
+  };
+}
modules/users/hpcesia/default.nix
@@ -44,6 +44,9 @@
           desktop.input-method.fcitx5
           desktop.kdeconnect
           desktop.terminal.foot
+
+          desktop.app.mpv
+          desktop.app.obs-studio
         ]))
       ++ (den.lib.policy.when
         ({host, ...}: host.hasAspect den.aspects.roles.game)