{ ... }: let mkPrimaryDesktopApplication = { name, package, desktopEntryName, }: { pkgs, ... }: { meta.desktop.${name} = { inherit desktopEntryName; package = package pkgs; }; }; in { flake.modules.homeManager.primary-browser-vivaldi = mkPrimaryDesktopApplication { name = "browser"; package = pkgs: pkgs.vivaldi; desktopEntryName = "vivaldi-stable"; }; flake.modules.homeManager.primary-file-manager-nautilus = mkPrimaryDesktopApplication { name = "fileManager"; package = pkgs: pkgs.nautilus; desktopEntryName = "org.gnome.Nautilus"; }; flake.modules.homeManager.desktop-defaults = { config, pkgs, ... }: let browser = config.meta.desktop.browser; fileManager = config.meta.desktop.fileManager; homeDir = config.home.homeDirectory; localDir = "${homeDir}/.local"; mediaDir = "${homeDir}/media"; in { home.preferXdgDirectories = true; home.sessionVariables.BROWSER = browser.command; home.packages = with pkgs; [ postman spotify calcure planify unzip gimp dbeaver-bin ] ++ [ browser.package fileManager.package ]; programs.imv.enable = true; programs.sioyek.enable = true; xdg = { enable = true; cacheHome = "${localDir}/cache"; configHome = "${homeDir}/.config"; dataHome = "${localDir}/share"; stateHome = "${localDir}/state"; userDirs = { enable = true; createDirectories = true; setSessionVariables = true; download = "${homeDir}/downloads"; documents = "${homeDir}/documents"; projects = "${homeDir}/dev"; music = "${mediaDir}/music"; pictures = "${mediaDir}/images"; videos = "${mediaDir}/videos"; desktop = "${localDir}/desktop"; publicShare = "${localDir}/public"; templates = "${localDir}/templates"; }; mimeApps = { enable = true; defaultApplicationPackages = with pkgs; [ sioyek imv neovim ] ++ [ fileManager.package browser.package ]; }; }; }; }