programs, xdg: move app packages and MIME defaults into modules

This commit is contained in:
2026-08-01 17:14:44 +08:00
parent 27aaa9d05f
commit 935530aca5
19 changed files with 317 additions and 147 deletions
+18 -71
View File
@@ -1,26 +1,28 @@
{
config,
pkgs,
username,
...
}:
{
my.programs = {
ollama.enable = true;
localsend.enable = true;
wpsoffice.enable = true;
papers.enable = true;
nautilus.enable = true;
ayugram.enable = true;
signal.enable = true;
element.enable = true;
fractal.enable = true;
qq.enable = true;
wechat.enable = true;
};
my.hm = {
home.packages = with pkgs; [
localsend
wpsoffice-cn
wps-office-fonts
ttf-wps-fonts
papers
ayugram-desktop
signal-desktop-wayland
element-desktop
fractal
qq-wayland
wechat
gnome-clocks
];
programs.zsh = {
@@ -50,52 +52,9 @@
coding.all.enable = true;
desktop.all.enable = true;
virt.moonlight.enable = true;
i18n.fcitx5.enable = true;
xdg.enable = true;
xdg = {
enable = true;
defaultApplications =
let
browser = [ config.my.desktop.browser.default.desktop ];
editor = [ "nvim.desktop" ];
imageviewer = [ "org.gnome.Loupe.desktop" ];
in
{
"inode/directory" = [ "org.gnome.Nautilus.desktop" ];
"application/pdf" = [ "org.gnome.Papers.desktop" ];
"text/*" = editor;
"application/json" = editor;
"text/xml" = editor;
"application/xml" = editor;
"application/xhtml+xml" = editor;
"application/xhtml_xml" = editor;
"application/rdf+xml" = editor;
"application/rss+xml" = editor;
"application/x-extension-htm" = editor;
"application/x-extension-html" = editor;
"application/x-extension-shtml" = editor;
"application/x-extension-xht" = editor;
"application/x-extension-xhtml" = editor;
"text/html" = browser;
"x-scheme-handler/about" = browser;
"x-scheme-handler/ftp" = browser;
"x-scheme-handler/http" = browser;
"x-scheme-handler/https" = browser;
"x-scheme-handler/unknown" = browser;
"audio/*" = imageviewer;
"video/*" = imageviewer;
"image/*" = imageviewer;
"image/gif" = imageviewer;
"image/jpeg" = imageviewer;
"image/png" = imageviewer;
"image/webp" = imageviewer;
};
};
persist = {
enable = true;
homeDirs = [
@@ -110,18 +69,6 @@
".cache"
".local/state"
".local/share/Kingsoft"
".local/share/AyuGramDesktop"
".local/share/fractal"
".config/Signal"
".config/Element"
".config/QQ"
".xwechat"
".config/Kingsoft"
".config/dconf"
".config/sunshine"
];
};
};
+18 -73
View File
@@ -1,26 +1,28 @@
{
config,
pkgs,
username,
...
}:
{
my.programs = {
ollama.enable = true;
localsend.enable = true;
wpsoffice.enable = true;
papers.enable = true;
nautilus.enable = true;
ayugram.enable = true;
signal.enable = true;
element.enable = true;
fractal.enable = true;
qq.enable = true;
wechat.enable = true;
};
my.hm = {
home.packages = with pkgs; [
localsend
wpsoffice-cn
wps-office-fonts
ttf-wps-fonts
papers
ayugram-desktop
signal-desktop-wayland
element-desktop
fractal
qq-wayland
wechat
gnome-clocks
];
programs.zsh = {
@@ -72,56 +74,9 @@
cli.all.enable = true;
coding.all.enable = true;
desktop.all.enable = true;
i18n.fcitx5.enable = true;
xdg.enable = true;
programs = {
ollama.enable = true;
};
xdg = {
enable = true;
defaultApplications =
let
browser = [ config.my.desktop.browser.default.desktop ];
editor = [ "nvim.desktop" ];
imageviewer = [ "org.gnome.Loupe.desktop" ];
in
{
"inode/directory" = [ "org.gnome.Nautilus.desktop" ];
"application/pdf" = [ "org.gnome.Papers.desktop" ];
"text/*" = editor;
"application/json" = editor;
"text/xml" = editor;
"application/xml" = editor;
"application/xhtml+xml" = editor;
"application/xhtml_xml" = editor;
"application/rdf+xml" = editor;
"application/rss+xml" = editor;
"application/x-extension-htm" = editor;
"application/x-extension-html" = editor;
"application/x-extension-shtml" = editor;
"application/x-extension-xht" = editor;
"application/x-extension-xhtml" = editor;
"text/html" = browser;
"x-scheme-handler/about" = browser;
"x-scheme-handler/ftp" = browser;
"x-scheme-handler/http" = browser;
"x-scheme-handler/https" = browser;
"x-scheme-handler/unknown" = browser;
"audio/*" = imageviewer;
"video/*" = imageviewer;
"image/*" = imageviewer;
"image/gif" = imageviewer;
"image/jpeg" = imageviewer;
"image/png" = imageviewer;
"image/webp" = imageviewer;
};
};
persist = {
enable = true;
homeDirs = [
@@ -134,17 +89,7 @@
".cache"
".local/state"
".local/share/Kingsoft"
".local/share/AyuGramDesktop"
".local/share/fractal"
".config/Signal"
".config/Element"
".config/QQ"
".xwechat"
".config/Kingsoft"
".config/dconf"
".config/sunshine"
];
};
+1
View File
@@ -53,6 +53,7 @@ in
my.persist.homeDirs = [
".local/share/zoxide"
".config/television/cable"
".config/dconf"
];
my.hm = {
programs.fish.shellAliases = {
+16
View File
@@ -7,6 +7,7 @@
}:
let
cfg = config.my.coding.editor.neovim;
desktop = [ "nvim.desktop" ];
in
{
options.my.coding.editor.neovim = {
@@ -49,5 +50,20 @@ in
my.persist.homeDirs = [
".local/share/nvim"
];
my.xdg.defaultApplications = {
"text/*" = desktop;
"application/json" = desktop;
"text/xml" = desktop;
"application/xml" = desktop;
"application/xhtml+xml" = desktop;
"application/xhtml_xml" = desktop;
"application/rdf+xml" = desktop;
"application/rss+xml" = desktop;
"application/x-extension-htm" = desktop;
"application/x-extension-html" = desktop;
"application/x-extension-shtml" = desktop;
"application/x-extension-xht" = desktop;
"application/x-extension-xhtml" = desktop;
};
};
}
+16 -1
View File
@@ -1,4 +1,8 @@
{ lib, ... }:
{ lib, config, ... }:
let
cfg = config.my.desktop.browser.default;
desktop = [ cfg.desktop ];
in
{
options.my.desktop.browser.default = {
command = lib.mkOption {
@@ -10,4 +14,15 @@
default = "zen-beta.desktop";
};
};
config = {
my.xdg.defaultApplications = {
"text/html" = desktop;
"x-scheme-handler/about" = desktop;
"x-scheme-handler/ftp" = desktop;
"x-scheme-handler/http" = desktop;
"x-scheme-handler/https" = desktop;
"x-scheme-handler/unknown" = desktop;
};
};
}
+5
View File
@@ -6,6 +6,7 @@
}:
let
cfg = config.my.desktop.media.cine;
desktop = [ "io.github.diegopvlk.Cine.desktop" ];
in
{
options.my.desktop.media.cine = {
@@ -14,5 +15,9 @@ in
config = lib.mkIf cfg.enable {
my.hm.home.packages = [ pkgs.cine ];
my.xdg.defaultApplications = {
"audio/*" = desktop;
"video/*" = desktop;
};
};
}
+8
View File
@@ -6,6 +6,7 @@
}:
let
cfg = config.my.desktop.media.loupe;
desktop = [ "org.gnome.Loupe.desktop" ];
in
{
options.my.desktop.media.loupe = {
@@ -14,5 +15,12 @@ in
config = lib.mkIf cfg.enable {
my.hm.home.packages = [ pkgs.loupe ];
my.xdg.defaultApplications = {
"image/*" = desktop;
"image/gif" = desktop;
"image/jpeg" = desktop;
"image/png" = desktop;
"image/webp" = desktop;
};
};
}
-1
View File
@@ -1,5 +1,4 @@
binds {
Mod+E { spawn "nautilus"; }
Ctrl+Alt+Escape { spawn "missioncenter"; }
Mod+R { spawn "noctalia-shell" "ipc" "call" "launcher" "toggle"; }
+1 -1
View File
@@ -33,6 +33,7 @@ in
};
security.pam.services.login.enableGnomeKeyring = true;
services.gnome.gnome-keyring.enable = true;
my.persist.homeDirs = [
{
directory = ".local/share/keyrings";
@@ -79,7 +80,6 @@ in
cliphist
brightnessctl
nautilus
mission-center
noctalia-shell
+23
View File
@@ -0,0 +1,23 @@
{
config,
lib,
pkgs,
...
}:
let
cfg = config.my.programs.ayugram;
in
{
options.my.programs.ayugram = {
enable = lib.mkEnableOption "ayugram";
};
config = lib.mkIf cfg.enable {
my.hm.home.packages = [
pkgs.ayugram-desktop
];
my.persist.homeDirs = [
".local/share/AyuGramDesktop"
];
};
}
+23
View File
@@ -0,0 +1,23 @@
{
config,
lib,
pkgs,
...
}:
let
cfg = config.my.programs.element;
in
{
options.my.programs.element = {
enable = lib.mkEnableOption "element";
};
config = lib.mkIf cfg.enable {
my.hm.home.packages = [
pkgs.element-desktop
];
my.persist.homeDirs = [
".config/Element"
];
};
}
+23
View File
@@ -0,0 +1,23 @@
{
config,
lib,
pkgs,
...
}:
let
cfg = config.my.programs.fractal;
in
{
options.my.programs.fractal = {
enable = lib.mkEnableOption "fractal";
};
config = lib.mkIf cfg.enable {
my.hm.home.packages = [
pkgs.fractal
];
my.persist.homeDirs = [
".local/share/fractal"
];
};
}
+23
View File
@@ -0,0 +1,23 @@
{
config,
lib,
pkgs,
...
}:
let
cfg = config.my.programs.localsend;
in
{
options.my.programs.localsend = {
enable = lib.mkEnableOption "localsend";
};
config = lib.mkIf cfg.enable {
my.hm.home.packages = [
pkgs.localsend
];
my.persist.homeDirs = [
".local/share/org.localsend.localsend_app"
];
};
}
+26
View File
@@ -0,0 +1,26 @@
{
config,
lib,
pkgs,
...
}:
let
cfg = config.my.programs.nautilus;
in
{
options.my.programs.nautilus = {
enable = lib.mkEnableOption "nautilus";
};
config = lib.mkIf cfg.enable {
my.hm.home.packages = [
pkgs.nautilus
];
my.xdg.defaultApplications = {
"inode/directory" = [ "org.gnome.Nautilus.desktop" ];
};
my.hm.wayland.windowManager.niri.settings.binds."Mod+E".spawn = [
"nautilus"
];
};
}
+21
View File
@@ -0,0 +1,21 @@
{
config,
lib,
pkgs,
...
}:
let
cfg = config.my.programs.papers;
in
{
options.my.programs.papers = {
enable = lib.mkEnableOption "papers";
};
config = lib.mkIf cfg.enable {
my.hm.home.packages = [
pkgs.papers
];
my.xdg.defaultApplications."application/pdf" = [ "org.gnome.Papers.desktop" ];
};
}
+23
View File
@@ -0,0 +1,23 @@
{
config,
lib,
pkgs,
...
}:
let
cfg = config.my.programs.qq;
in
{
options.my.programs.qq = {
enable = lib.mkEnableOption "qq";
};
config = lib.mkIf cfg.enable {
my.hm.home.packages = [
pkgs.qq-wayland
];
my.persist.homeDirs = [
".config/QQ"
];
};
}
+23
View File
@@ -0,0 +1,23 @@
{
config,
lib,
pkgs,
...
}:
let
cfg = config.my.programs.signal;
in
{
options.my.programs.signal = {
enable = lib.mkEnableOption "signal";
};
config = lib.mkIf cfg.enable {
my.hm.home.packages = [
pkgs.signal-desktop-wayland
];
my.persist.homeDirs = [
".config/Signal"
];
};
}
+23
View File
@@ -0,0 +1,23 @@
{
config,
lib,
pkgs,
...
}:
let
cfg = config.my.programs.wechat;
in
{
options.my.programs.wechat = {
enable = lib.mkEnableOption "wechat";
};
config = lib.mkIf cfg.enable {
my.hm.home.packages = [
pkgs.wechat
];
my.persist.homeDirs = [
".xwechat"
];
};
}
+26
View File
@@ -0,0 +1,26 @@
{
config,
lib,
pkgs,
...
}:
let
cfg = config.my.programs.wpsoffice;
in
{
options.my.programs.wpsoffice = {
enable = lib.mkEnableOption "wpsoffice";
};
config = lib.mkIf cfg.enable {
my.hm.home.packages = with pkgs; [
wpsoffice-cn
wps-office-fonts
ttf-wps-fonts
];
my.persist.homeDirs = [
".config/Kingsoft"
".local/share/Kingsoft"
];
};
}