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,33 +6,6 @@
... ...
}: let }: let
mimeMap = desktopId: mimeTypes: lib.genAttrs mimeTypes (_: [desktopId]); mimeMap = desktopId: mimeTypes: lib.genAttrs mimeTypes (_: [desktopId]);
in {
# Automatic garbage collection of old home-manager generations
nix.gc = {
automatic = true;
dates = "weekly";
options = "--delete-older-than 7d";
};
xdg.configFile."greenclip.toml".text = ''
[greenclip]
history_file = "~/.cache/greenclip.history"
max_history_length = 50
max_selection_size_bytes = 0
trim_space_from_selection = true
use_primary_selection_as_input = false
blacklisted_applications = []
enable_image_support = true
image_cache_directory = "~/.cache/greenclip"
static_history = []
'';
xdg.configFile."zellij/config.kdl".source =
config.lib.file.mkOutOfStoreSymlink
"${config.home.homeDirectory}/dotfiles/dotfiles/config/zellij/config.kdl";
xdg.mimeApps = lib.mkIf nixos.config.myModules.desktop.enable (
let
browser = "google-chrome.desktop"; browser = "google-chrome.desktop";
imageViewer = "org.kde.gwenview.desktop"; imageViewer = "org.kde.gwenview.desktop";
pdfViewer = "okularApplication_pdf.desktop"; pdfViewer = "okularApplication_pdf.desktop";
@@ -47,7 +20,6 @@ in {
wordProcessor = "writer.desktop"; wordProcessor = "writer.desktop";
spreadsheet = "calc.desktop"; spreadsheet = "calc.desktop";
presentation = "impress.desktop"; presentation = "impress.desktop";
defaultApplications = defaultApplications =
(mimeMap imageViewer [ (mimeMap imageViewer [
"image/avif" "image/avif"
@@ -163,12 +135,82 @@ in {
"x-scheme-handler/element" = ["element-desktop.desktop"]; "x-scheme-handler/element" = ["element-desktop.desktop"];
"x-scheme-handler/magnet" = ["transmission-gtk.desktop"]; "x-scheme-handler/magnet" = ["transmission-gtk.desktop"];
}; };
in { 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 {
# Automatic garbage collection of old home-manager generations
nix.gc = {
automatic = true;
dates = "weekly";
options = "--delete-older-than 7d";
};
xdg.configFile."greenclip.toml".text = ''
[greenclip]
history_file = "~/.cache/greenclip.history"
max_history_length = 50
max_selection_size_bytes = 0
trim_space_from_selection = true
use_primary_selection_as_input = false
blacklisted_applications = []
enable_image_support = true
image_cache_directory = "~/.cache/greenclip"
static_history = []
'';
xdg.configFile."zellij/config.kdl".source =
config.lib.file.mkOutOfStoreSymlink
"${config.home.homeDirectory}/dotfiles/dotfiles/config/zellij/config.kdl";
xdg.configFile."menus/applications.menu" = lib.mkIf nixos.config.myModules.desktop.enable {
source = "${pkgs.kdePackages.plasma-workspace}/etc/xdg/menus/plasma-applications.menu";
};
xdg.configFile."kde-mimeapps.list" = lib.mkIf nixos.config.myModules.desktop.enable {
text = mimeAppsListText;
};
xdg.configFile."none+xmonad-mimeapps.list" = lib.mkIf nixos.config.myModules.desktop.enable {
text = mimeAppsListText;
};
xdg.configFile."xmonad-mimeapps.list" = lib.mkIf nixos.config.myModules.desktop.enable {
text = mimeAppsListText;
};
xdg.configFile."hyprland-mimeapps.list" = lib.mkIf nixos.config.myModules.desktop.enable {
text = mimeAppsListText;
};
xdg.dataFile."mimeapps.list" = lib.mkIf nixos.config.myModules.desktop.enable {
text = mimeAppsListText;
};
xdg.dataFile."applications/kde-mimeapps.list" = lib.mkIf nixos.config.myModules.desktop.enable {
text = mimeAppsListText;
};
xdg.mimeApps = lib.mkIf nixos.config.myModules.desktop.enable {
enable = true; enable = true;
associations.added = defaultApplications; associations.added = defaultApplications;
inherit 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"