diff options
| author | triethyl <triethylammonium@pm.me> | 2025-10-19 19:52:10 -0400 |
|---|---|---|
| committer | triethyl <triethylammonium@pm.me> | 2025-10-19 19:52:10 -0400 |
| commit | 3efcedf06ab696b74e415ca1ee20a50f117b3235 (patch) | |
| tree | fdcfc685c5c099e8a10778c1c5a69b6c6c1a0211 /home-manager/modules | |
| parent | 37b93dc5f4fe3de79daad559d6d7c6fef3386f34 (diff) | |
modules: finished default-apps module
Diffstat (limited to 'home-manager/modules')
| -rw-r--r-- | home-manager/modules/default-apps.nix | 133 |
1 files changed, 114 insertions, 19 deletions
diff --git a/home-manager/modules/default-apps.nix b/home-manager/modules/default-apps.nix index 7ec2b16..3c7a272 100644 --- a/home-manager/modules/default-apps.nix +++ b/home-manager/modules/default-apps.nix @@ -1,49 +1,144 @@ { config, lib, ... }: let cfg = config.default-applications; - mkCommand = name: lib.mkOption { + mkCommand = name: default: lib.mkOption { type = lib.types.str; - default = ""; - description = "The default ${name}."; + default = default; + description = "The default ${name}'s command'"; }; - mkDesktopFile = name: lib.mkOption { + mkDesktopFile = name: default: lib.mkOption { type = lib.types.str; - default = ""; + default = default; description = "The default ${name}'s .desktop file"; }; + # Empty entries mess things up when a mimetype has more than one app. + removeEmpty = desktop-files: builtins.filter (name: name != "") desktop-files; in { options.default-applications = { web-browser = { - command = mkCommand "web browser"; - desktop-file = mkDesktopFile "web browser"; + command = mkCommand "web browser" "librewolf"; + desktop-file = mkDesktopFile "web browser" "librewolf.desktop"; }; text-editor = { - command = mkCommand "text editor"; - desktop-file = mkDesktopFile "text editor"; + command = mkCommand "text editor" "neovide"; + desktop-file = mkDesktopFile "text editor" "neovide.desktop"; }; image-viewer = { - command = mkCommand "image viewer"; - desktop-file = mkDesktopFile "image viewer"; + command = mkCommand "image viewer" "imv"; + desktop-file = mkDesktopFile "image viewer" "imv.desktop"; }; video-viewer = { - command = mkCommand "video viewer"; - desktop-file = mkDesktopFile "video viewer"; + command = mkCommand "video viewer" "mpv"; + desktop-file = mkDesktopFile "video viewer" "mpv.desktop"; + }; + audio-player = { + command = mkCommand "audio player" ""; + desktop-file = mkDesktopFile "audio player" ""; }; terminal-emulator = { - command = mkCommand "terminal emulator"; - runTuiCommand = mkCommand "terminal emulator run tui command"; - runCliCommand = mkCommand "terminal emulator run cli command"; - desktop-file = mkDesktopFile "terminal emulator"; + command = mkCommand "terminal emulator" "foot"; + runTuiCommand = mkCommand "(when running a tui program) terminal emulator" "foot"; + runCliCommand = mkCommand "(when running a cli command) terminal emulator" "foot -H"; + openDirCommand = mkCommand "(when opening a dir) terminal emulator" "foot -D"; + desktop-file = mkDesktopFile "terminal emulator" "foot.desktop"; + }; + file-manager = { + command = mkCommand "file manager" ""; + desktop-file = mkDesktopFile "file manager" ""; }; }; config = { xdg.mimeApps = { enable = true; defaultApplications = { - "text/plain" = [ cfg.text-editor.desktop-file ]; - "text/html" = [ cfg.text-editor.desktop-file ]; + # Web Browser + "text/html" = (removeEmpty [ cfg.web-browser.desktop-file cfg.text-editor.desktop-file ]); + "text/xml" = [ cfg.web-browser.desktop-file ]; + "application/xhtml+xml" = [ cfg.web-browser.desktop-file ]; + "application/javascript" = [ cfg.web-browser.desktop-file ]; + "application/rss+xml" = [ cfg.web-browser.desktop-file ]; + "application/atom+xml" = [ cfg.web-browser.desktop-file ]; + "application/pdf" = [ cfg.web-browser.desktop-file ]; + "application/x-www-form-urlencoded" = [ cfg.web-browser.desktop-file ]; + "multipart/form-data" = [ cfg.web-browser.desktop-file ]; + + # Text Editor "text/nix" = [ cfg.text-editor.desktop-file ]; + "text/plain" = [ cfg.text-editor.desktop-file ]; + "text/x-python" = [ cfg.text-editor.desktop-file ]; + "text/x-c" = [ cfg.text-editor.desktop-file ]; + "text/x-java-source" = [ cfg.text-editor.desktop-file ]; + "text/x-shellscript" = [ cfg.text-editor.desktop-file ]; + "text/x-markdown" = [ cfg.text-editor.desktop-file ]; + "text/css" = [ cfg.text-editor.desktop-file ]; + "application/json" = [ cfg.text-editor.desktop-file ]; + "application/xml" = [ cfg.text-editor.desktop-file ]; + "application/x-yaml" = [ cfg.text-editor.desktop-file ]; + "application/x-perl" = [ cfg.text-editor.desktop-file ]; + "application/x-php" = [ cfg.text-editor.desktop-file ]; + "application/x-sql" = [ cfg.text-editor.desktop-file ]; + "application/x-sh" = [ cfg.text-editor.desktop-file ]; + "application/x-cmake" = [ cfg.text-editor.desktop-file ]; + "application/x-latex" = [ cfg.text-editor.desktop-file ]; + "application/x-tex" = [ cfg.text-editor.desktop-file ]; + "text/x-log" = [ cfg.text-editor.desktop-file ]; + "text/csv" = [ cfg.text-editor.desktop-file ]; + + # Image Viewer + "image/jpeg" = [ cfg.image-viewer.desktop-file ]; + "image/jpg" = [ cfg.image-viewer.desktop-file ]; + "image/png" = [ cfg.image-viewer.desktop-file ]; + "image/gif" = [ cfg.image-viewer.desktop-file ]; + "image/bmp" = [ cfg.image-viewer.desktop-file ]; + "image/webp" = [ cfg.image-viewer.desktop-file ]; + "image/tiff" = [ cfg.image-viewer.desktop-file ]; + "image/x-xbitmap" = [ cfg.image-viewer.desktop-file ]; + "image/x-xpixmap" = [ cfg.image-viewer.desktop-file ]; + "image/x-portable-pixmap" = [ cfg.image-viewer.desktop-file ]; + "image/x-portable-graymap" = [ cfg.image-viewer.desktop-file ]; + "image/svg+xml" = (removeEmpty [ cfg.image-viewer.desktop-file cfg.web-browser.desktop-file ]); + "image/heif" = [ cfg.image-viewer.desktop-file ]; + "image/heic" = [ cfg.image-viewer.desktop-file ]; + + # Video Viewer + "video/mp4" = [ cfg.video-viewer.desktop-file ]; + "video/x-msvideo" = [ cfg.video-viewer.desktop-file ]; + "video/x-matroska" = [ cfg.video-viewer.desktop-file ]; + "video/webm" = [ cfg.video-viewer.desktop-file ]; + "video/ogg" = [ cfg.video-viewer.desktop-file ]; + "video/mpeg" = [ cfg.video-viewer.desktop-file ]; + "video/quicktime" = [ cfg.video-viewer.desktop-file ]; + "video/x-flv" = [ cfg.video-viewer.desktop-file ]; + "application/vnd.rn-realmedia" = [ cfg.video-viewer.desktop-file ]; + "application/x-mplayer2" = [ cfg.video-viewer.desktop-file ]; + + # Audio Player + "audio/mpeg" = [ cfg.audio-player.desktop-file ]; + "audio/og" = [ cfg.audio-player.desktop-file ]; + "audio/wa" = [ cfg.audio-player.desktop-file ]; + "audio/fla" = [ cfg.audio-player.desktop-file ]; + "audio/aa" = [ cfg.audio-player.desktop-file ]; + "audio/x-ms-wm" = [ cfg.audio-player.desktop-file ]; + "audio/x-matrosk" = [ cfg.audio-player.desktop-file ]; + + # Terminal Emulator and File Manager + "inode/directory" = (removeEmpty [ cfg.file-manager.desktop-file "open-terminal-here.desktop" ]); }; }; + # Allows terminals to work instead of file managers + home.file."open-terminal-here" = { + target = ".local/share/applications/open-terminal-here.desktop"; + text = '' + [Desktop Entry] + Name=Open Terminal Here + Comment=Open terminal in this directory + Exec=${cfg.terminal-emulator.openDirCommand} %f + Icon=utilities-terminal + Type=Application + Terminal=false + MimeType=inode/directory; + NoDisplay=true + ''; + }; }; } |
