Fix KDE MIME defaults in xmonad session

This commit is contained in:
2026-04-29 14:08:19 -07:00
parent 4e52e81a50
commit 1a2b75adcb
2 changed files with 204 additions and 142 deletions

View File

@@ -6,6 +6,152 @@
... ...
}: let }: let
mimeMap = desktopId: mimeTypes: lib.genAttrs mimeTypes (_: [desktopId]); mimeMap = desktopId: mimeTypes: lib.genAttrs mimeTypes (_: [desktopId]);
browser = "google-chrome.desktop";
imageViewer = "org.kde.gwenview.desktop";
pdfViewer = "okularApplication_pdf.desktop";
comicViewer = "okularApplication_comicbook.desktop";
djvuViewer = "okularApplication_djvu.desktop";
ebookViewer = "okularApplication_epub.desktop";
mobiViewer = "okularApplication_mobi.desktop";
xpsViewer = "okularApplication_xps.desktop";
mediaPlayer = "vlc.desktop";
archiveManager = "org.gnome.FileRoller.desktop";
fileManager = "thunar.desktop";
wordProcessor = "writer.desktop";
spreadsheet = "calc.desktop";
presentation = "impress.desktop";
defaultApplications =
(mimeMap imageViewer [
"image/avif"
"image/bmp"
"image/gif"
"image/heic"
"image/heif"
"image/jpeg"
"image/jxl"
"image/png"
"image/svg+xml"
"image/svg+xml-compressed"
"image/tiff"
"image/vnd.microsoft.icon"
"image/webp"
])
// (mimeMap pdfViewer [
"application/pdf"
"application/x-bzpdf"
"application/x-gzpdf"
])
// (mimeMap comicViewer [
"application/x-cb7"
"application/x-cbr"
"application/x-cbt"
"application/x-cbz"
])
// (mimeMap djvuViewer [
"image/vnd.djvu"
])
// (mimeMap ebookViewer [
"application/epub+zip"
])
// (mimeMap mobiViewer [
"application/x-mobipocket-ebook"
])
// (mimeMap xpsViewer [
"application/oxps"
"application/vnd.ms-xpsdocument"
])
// (mimeMap mediaPlayer [
"application/ogg"
"audio/flac"
"audio/mp4"
"audio/mpeg"
"audio/ogg"
"audio/opus"
"audio/webm"
"audio/wav"
"audio/x-flac"
"audio/x-wav"
"video/mp4"
"video/ogg"
"video/quicktime"
"video/webm"
"video/x-matroska"
"video/x-msvideo"
])
// (mimeMap archiveManager [
"application/bzip2"
"application/gzip"
"application/vnd.rar"
"application/x-7z-compressed"
"application/x-bzip"
"application/x-compressed-tar"
"application/x-gzip"
"application/x-rar"
"application/x-rar-compressed"
"application/x-tar"
"application/x-xz"
"application/x-zip-compressed"
"application/zip"
"application/zstd"
])
// (mimeMap wordProcessor [
"application/msword"
"application/rtf"
"application/vnd.ms-word"
"application/vnd.oasis.opendocument.text"
"application/vnd.openxmlformats-officedocument.wordprocessingml.document"
])
// (mimeMap spreadsheet [
"application/vnd.ms-excel"
"application/vnd.oasis.opendocument.spreadsheet"
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
"text/csv"
"text/tab-separated-values"
])
// (mimeMap presentation [
"application/mspowerpoint"
"application/vnd.ms-powerpoint"
"application/vnd.oasis.opendocument.presentation"
"application/vnd.openxmlformats-officedocument.presentationml.presentation"
"application/vnd.openxmlformats-officedocument.presentationml.slideshow"
])
// (mimeMap fileManager [
"inode/directory"
])
// (mimeMap browser [
"application/rdf+xml"
"application/rss+xml"
"application/xhtml+xml"
"application/xhtml_xml"
"application/xml"
"text/html"
"text/xml"
"x-scheme-handler/about"
"x-scheme-handler/http"
"x-scheme-handler/https"
"x-scheme-handler/unknown"
])
// {
"x-scheme-handler/element" = ["element-desktop.desktop"];
"x-scheme-handler/magnet" = ["transmission-gtk.desktop"];
};
mimeAppsListText = let
formatApplications = applications:
lib.concatStringsSep "\n" (
lib.mapAttrsToList (
mimeType: desktopIds: "${mimeType}=${lib.concatStringsSep ";" desktopIds};"
)
applications
);
in ''
[Added Associations]
${formatApplications defaultApplications}
[Default Applications]
${formatApplications defaultApplications}
[Removed Associations]
'';
in { in {
# Automatic garbage collection of old home-manager generations # Automatic garbage collection of old home-manager generations
nix.gc = { nix.gc = {
@@ -27,148 +173,44 @@ in {
static_history = [] static_history = []
''; '';
xdg.configFile."zellij/config.kdl".source = xdg.configFile."zellij/config.kdl".source =
config.lib.file.mkOutOfStoreSymlink config.lib.file.mkOutOfStoreSymlink
"${config.home.homeDirectory}/dotfiles/dotfiles/config/zellij/config.kdl"; "${config.home.homeDirectory}/dotfiles/dotfiles/config/zellij/config.kdl";
xdg.mimeApps = lib.mkIf nixos.config.myModules.desktop.enable ( xdg.configFile."menus/applications.menu" = lib.mkIf nixos.config.myModules.desktop.enable {
let source = "${pkgs.kdePackages.plasma-workspace}/etc/xdg/menus/plasma-applications.menu";
browser = "google-chrome.desktop"; };
imageViewer = "org.kde.gwenview.desktop";
pdfViewer = "okularApplication_pdf.desktop";
comicViewer = "okularApplication_comicbook.desktop";
djvuViewer = "okularApplication_djvu.desktop";
ebookViewer = "okularApplication_epub.desktop";
mobiViewer = "okularApplication_mobi.desktop";
xpsViewer = "okularApplication_xps.desktop";
mediaPlayer = "vlc.desktop";
archiveManager = "org.gnome.FileRoller.desktop";
fileManager = "thunar.desktop";
wordProcessor = "writer.desktop";
spreadsheet = "calc.desktop";
presentation = "impress.desktop";
defaultApplications = xdg.configFile."kde-mimeapps.list" = lib.mkIf nixos.config.myModules.desktop.enable {
(mimeMap imageViewer [ text = mimeAppsListText;
"image/avif" };
"image/bmp"
"image/gif" xdg.configFile."none+xmonad-mimeapps.list" = lib.mkIf nixos.config.myModules.desktop.enable {
"image/heic" text = mimeAppsListText;
"image/heif" };
"image/jpeg"
"image/jxl" xdg.configFile."xmonad-mimeapps.list" = lib.mkIf nixos.config.myModules.desktop.enable {
"image/png" text = mimeAppsListText;
"image/svg+xml" };
"image/svg+xml-compressed"
"image/tiff" xdg.configFile."hyprland-mimeapps.list" = lib.mkIf nixos.config.myModules.desktop.enable {
"image/vnd.microsoft.icon" text = mimeAppsListText;
"image/webp" };
])
// (mimeMap pdfViewer [ xdg.dataFile."mimeapps.list" = lib.mkIf nixos.config.myModules.desktop.enable {
"application/pdf" text = mimeAppsListText;
"application/x-bzpdf" };
"application/x-gzpdf"
]) xdg.dataFile."applications/kde-mimeapps.list" = lib.mkIf nixos.config.myModules.desktop.enable {
// (mimeMap comicViewer [ text = mimeAppsListText;
"application/x-cb7" };
"application/x-cbr"
"application/x-cbt" xdg.mimeApps = lib.mkIf nixos.config.myModules.desktop.enable {
"application/x-cbz" enable = true;
]) associations.added = defaultApplications;
// (mimeMap djvuViewer [ inherit defaultApplications;
"image/vnd.djvu" };
])
// (mimeMap ebookViewer [
"application/epub+zip"
])
// (mimeMap mobiViewer [
"application/x-mobipocket-ebook"
])
// (mimeMap xpsViewer [
"application/oxps"
"application/vnd.ms-xpsdocument"
])
// (mimeMap mediaPlayer [
"application/ogg"
"audio/flac"
"audio/mp4"
"audio/mpeg"
"audio/ogg"
"audio/opus"
"audio/webm"
"audio/wav"
"audio/x-flac"
"audio/x-wav"
"video/mp4"
"video/ogg"
"video/quicktime"
"video/webm"
"video/x-matroska"
"video/x-msvideo"
])
// (mimeMap archiveManager [
"application/bzip2"
"application/gzip"
"application/vnd.rar"
"application/x-7z-compressed"
"application/x-bzip"
"application/x-compressed-tar"
"application/x-gzip"
"application/x-rar"
"application/x-rar-compressed"
"application/x-tar"
"application/x-xz"
"application/x-zip-compressed"
"application/zip"
"application/zstd"
])
// (mimeMap wordProcessor [
"application/msword"
"application/rtf"
"application/vnd.ms-word"
"application/vnd.oasis.opendocument.text"
"application/vnd.openxmlformats-officedocument.wordprocessingml.document"
])
// (mimeMap spreadsheet [
"application/vnd.ms-excel"
"application/vnd.oasis.opendocument.spreadsheet"
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
"text/csv"
"text/tab-separated-values"
])
// (mimeMap presentation [
"application/mspowerpoint"
"application/vnd.ms-powerpoint"
"application/vnd.oasis.opendocument.presentation"
"application/vnd.openxmlformats-officedocument.presentationml.presentation"
"application/vnd.openxmlformats-officedocument.presentationml.slideshow"
])
// (mimeMap fileManager [
"inode/directory"
])
// (mimeMap browser [
"application/rdf+xml"
"application/rss+xml"
"application/xhtml+xml"
"application/xhtml_xml"
"application/xml"
"text/html"
"text/xml"
"x-scheme-handler/about"
"x-scheme-handler/http"
"x-scheme-handler/https"
"x-scheme-handler/unknown"
])
// {
"x-scheme-handler/element" = ["element-desktop.desktop"];
"x-scheme-handler/magnet" = ["transmission-gtk.desktop"];
};
in {
enable = true;
associations.added = defaultApplications;
inherit defaultApplications;
}
);
home.activation.refreshChromeDesktopMimeCache = lib.hm.dag.entryAfter ["writeBoundary"] '' home.activation.refreshChromeDesktopMimeCache = lib.hm.dag.entryAfter ["writeBoundary"] ''
applications_dir="$HOME/.local/share/applications" applications_dir="$HOME/.local/share/applications"
@@ -180,6 +222,7 @@ in {
do do
if [ -f "$desktop_file" ]; then if [ -f "$desktop_file" ]; then
${pkgs.gnused}/bin/sed -i \ ${pkgs.gnused}/bin/sed -i \
-e 's,application/pdf;,,g' \
-e 's,image/gif;,,g' \ -e 's,image/gif;,,g' \
-e 's,image/jpeg;,,g' \ -e 's,image/jpeg;,,g' \
-e 's,image/png;,,g' \ -e 's,image/png;,,g' \
@@ -188,10 +231,34 @@ in {
fi fi
done done
for desktop_file in "$applications_dir"/okular*.desktop "$applications_dir"/vlc*.desktop; do
if [ -f "$desktop_file" ]; then
${pkgs.gnused}/bin/sed -i \
-e 's,image/avif;,,g' \
-e 's,image/bmp;,,g' \
-e 's,image/gif;,,g' \
-e 's,image/heic;,,g' \
-e 's,image/heif;,,g' \
-e 's,image/jpeg;,,g' \
-e 's,image/jxl;,,g' \
-e 's,image/png;,,g' \
-e 's,image/svg+xml;,,g' \
-e 's,image/svg+xml-compressed;,,g' \
-e 's,image/tiff;,,g' \
-e 's,image/vnd.microsoft.icon;,,g' \
-e 's,image/webp;,,g' \
"$desktop_file"
fi
done
${pkgs.desktop-file-utils}/bin/update-desktop-database "$applications_dir" >/dev/null 2>&1 || true ${pkgs.desktop-file-utils}/bin/update-desktop-database "$applications_dir" >/dev/null 2>&1 || true
fi fi
''; '';
home.activation.refreshKdeServiceCache = lib.hm.dag.entryAfter ["refreshChromeDesktopMimeCache"] ''
${pkgs.kdePackages.kservice}/bin/kbuildsycoca6 --noincremental >/dev/null 2>&1 || true
'';
xsession = { xsession = {
enable = true; enable = true;
preferStatusNotifierItems = true; preferStatusNotifierItems = true;

View File

@@ -184,16 +184,11 @@
type = "Application"; type = "Application";
categories = [ "Network" "WebBrowser" ]; categories = [ "Network" "WebBrowser" ];
mimeType = [ mimeType = [
"application/pdf"
"application/rdf+xml" "application/rdf+xml"
"application/rss+xml" "application/rss+xml"
"application/xhtml+xml" "application/xhtml+xml"
"application/xhtml_xml" "application/xhtml_xml"
"application/xml" "application/xml"
"image/gif"
"image/jpeg"
"image/png"
"image/webp"
"text/html" "text/html"
"text/xml" "text/xml"
"x-scheme-handler/http" "x-scheme-handler/http"