Add image viewer, video player and PDF viewer defaults to the menu

This commit is contained in:
SirBlob committed 2026-09-24 12:49:45 -04:00
1 parent 5732986fee
commit 1f86bfd151
17 files changed
+226 -15

No files matched your search

+31
View File
@@ -0,0 +1,31 @@
#!/bin/bash
# blob:summary=Set the default image viewer
# blob:args=[loupe|imv|eog|gwenview]
# blob:examples=blob default image-viewer loupe | blob default image-viewer imv
if (($# == 0)); then
case "$(blob-default-mime image)" in
org.gnome.Loupe.desktop) echo "loupe" ;;
imv.desktop) echo "imv" ;;
org.gnome.eog.desktop) echo "eog" ;;
org.kde.gwenview.desktop) echo "gwenview" ;;
*) blob-default-mime image ;;
esac
exit 0
fi
case "$1" in
loupe) desktop_id="org.gnome.Loupe.desktop"; name="Loupe" ;;
imv) desktop_id="imv.desktop"; name="imv" ;;
eog) desktop_id="org.gnome.eog.desktop"; name="Eye of GNOME" ;;
gwenview) desktop_id="org.kde.gwenview.desktop"; name="Gwenview" ;;
*)
echo "Usage: blob-default-image-viewer <loupe|imv|eog|gwenview>"
exit 1
;;
esac
blob-default-mime image "$desktop_id" || exit 1
blob-notify-send -g 󰋩 "$name is now the default image viewer"
+23
View File
@@ -0,0 +1,23 @@
#!/bin/bash
# blob:summary=Get or set the application that opens one group of file types
# blob:args=<image|video|pdf|document|spreadsheet|presentation|text|archive> [desktop-id]
# blob:examples=blob default mime image | blob default mime video vlc.desktop
# blob:hidden=true
kind="${1:-}"
desktop_id="${2:-}"
types_file="$BLOB_PATH/default/mime/$kind.types"
if [[ -z $kind || ! -f $types_file ]]; then
echo "Usage: blob-default-mime <image|video|pdf|document|spreadsheet|presentation|text|archive> [desktop-id]" >&2
exit 1
fi
if [[ -z $desktop_id ]]; then
xdg-mime query default "$(head -1 "$types_file")"
exit 0
fi
mapfile -t mime_types < <(grep -v '^[[:space:]]*$' "$types_file")
xdg-mime default "$desktop_id" "${mime_types[@]}"
+35
View File
@@ -0,0 +1,35 @@
#!/bin/bash
# blob:summary=Set the default PDF and document viewer
# blob:args=[evince|papers|okular|zathura|firefox|chromium]
# blob:examples=blob default pdf-viewer evince | blob default pdf-viewer zathura
if (($# == 0)); then
case "$(blob-default-mime pdf)" in
org.gnome.Evince.desktop) echo "evince" ;;
org.gnome.Papers.desktop) echo "papers" ;;
org.kde.okular.desktop) echo "okular" ;;
org.pwmt.zathura.desktop) echo "zathura" ;;
firefox.desktop) echo "firefox" ;;
chromium.desktop) echo "chromium" ;;
*) blob-default-mime pdf ;;
esac
exit 0
fi
case "$1" in
evince) desktop_id="org.gnome.Evince.desktop"; name="Evince" ;;
papers) desktop_id="org.gnome.Papers.desktop"; name="Papers" ;;
okular) desktop_id="org.kde.okular.desktop"; name="Okular" ;;
zathura) desktop_id="org.pwmt.zathura.desktop"; name="Zathura" ;;
firefox) desktop_id="firefox.desktop"; name="Firefox" ;;
chromium) desktop_id="chromium.desktop"; name="Chromium" ;;
*)
echo "Usage: blob-default-pdf-viewer <evince|papers|okular|zathura|firefox|chromium>"
exit 1
;;
esac
blob-default-mime pdf "$desktop_id" || exit 1
blob-notify-send -g 󰈦 "$name is now the default PDF viewer"
+31
View File
@@ -0,0 +1,31 @@
#!/bin/bash
# blob:summary=Set the default video and audio player
# blob:args=[mpv|vlc|celluloid|totem]
# blob:examples=blob default video-player mpv | blob default video-player vlc
if (($# == 0)); then
case "$(blob-default-mime video)" in
mpv.desktop) echo "mpv" ;;
vlc.desktop) echo "vlc" ;;
io.github.celluloid_player.Celluloid.desktop) echo "celluloid" ;;
org.gnome.Totem.desktop) echo "totem" ;;
*) blob-default-mime video ;;
esac
exit 0
fi
case "$1" in
mpv) desktop_id="mpv.desktop"; name="mpv" ;;
vlc) desktop_id="vlc.desktop"; name="VLC" ;;
celluloid) desktop_id="io.github.celluloid_player.Celluloid.desktop"; name="Celluloid" ;;
totem) desktop_id="org.gnome.Totem.desktop"; name="GNOME Videos" ;;
*)
echo "Usage: blob-default-video-player <mpv|vlc|celluloid|totem>"
exit 1
;;
esac
blob-default-mime video "$desktop_id" || exit 1
blob-notify-send -g 󰕧 "$name is now the default video player"
+17
View File
@@ -232,6 +232,23 @@
"setup.default.editor.helix": {"icon":"","label":"Helix","when":"blob-cmd-present helix","checked":"[[ \"$(blob-default-editor)\" == \"helix\" ]]","action":"blob-default-editor helix"},
"setup.default.editor.vim": {"icon":"","label":"Vim","when":"blob-cmd-present vim","checked":"[[ \"$(blob-default-editor)\" == \"vim\" ]]","action":"blob-default-editor vim"},
"setup.default.editor.emacs": {"icon":"","label":"Emacs","when":"blob-cmd-present emacs","checked":"[[ \"$(blob-default-editor)\" == \"emacs\" ]]","action":"blob-default-editor emacs"},
"setup.default.image": {"icon":"󰋩","label":"Image Viewer","title":"Default Image Viewer"},
"setup.default.image.loupe": {"icon":"󰋩","label":"Loupe","when":"blob-cmd-present loupe","checked":"[[ \"$(blob-default-image-viewer)\" == \"loupe\" ]]","action":"blob-default-image-viewer loupe"},
"setup.default.image.imv": {"icon":"󰋩","label":"imv","when":"blob-cmd-present imv","checked":"[[ \"$(blob-default-image-viewer)\" == \"imv\" ]]","action":"blob-default-image-viewer imv"},
"setup.default.image.eog": {"icon":"󰋩","label":"Eye of GNOME","when":"blob-cmd-present eog","checked":"[[ \"$(blob-default-image-viewer)\" == \"eog\" ]]","action":"blob-default-image-viewer eog"},
"setup.default.image.gwenview": {"icon":"󰋩","label":"Gwenview","when":"blob-cmd-present gwenview","checked":"[[ \"$(blob-default-image-viewer)\" == \"gwenview\" ]]","action":"blob-default-image-viewer gwenview"},
"setup.default.video": {"icon":"󰕧","label":"Video Player","title":"Default Video Player"},
"setup.default.video.mpv": {"icon":"󰕧","label":"mpv","when":"blob-cmd-present mpv","checked":"[[ \"$(blob-default-video-player)\" == \"mpv\" ]]","action":"blob-default-video-player mpv"},
"setup.default.video.vlc": {"icon":"󰕼","label":"VLC","when":"blob-cmd-present vlc","checked":"[[ \"$(blob-default-video-player)\" == \"vlc\" ]]","action":"blob-default-video-player vlc"},
"setup.default.video.celluloid": {"icon":"󰕧","label":"Celluloid","when":"blob-cmd-present celluloid","checked":"[[ \"$(blob-default-video-player)\" == \"celluloid\" ]]","action":"blob-default-video-player celluloid"},
"setup.default.video.totem": {"icon":"󰕧","label":"GNOME Videos","when":"blob-cmd-present totem","checked":"[[ \"$(blob-default-video-player)\" == \"totem\" ]]","action":"blob-default-video-player totem"},
"setup.default.pdf": {"icon":"󰈦","label":"PDF Viewer","title":"Default PDF Viewer"},
"setup.default.pdf.evince": {"icon":"󰈦","label":"Evince","when":"blob-cmd-present evince","checked":"[[ \"$(blob-default-pdf-viewer)\" == \"evince\" ]]","action":"blob-default-pdf-viewer evince"},
"setup.default.pdf.papers": {"icon":"󰈦","label":"Papers","when":"blob-cmd-present papers","checked":"[[ \"$(blob-default-pdf-viewer)\" == \"papers\" ]]","action":"blob-default-pdf-viewer papers"},
"setup.default.pdf.okular": {"icon":"󰈦","label":"Okular","when":"blob-cmd-present okular","checked":"[[ \"$(blob-default-pdf-viewer)\" == \"okular\" ]]","action":"blob-default-pdf-viewer okular"},
"setup.default.pdf.zathura": {"icon":"󰈦","label":"Zathura","when":"blob-cmd-present zathura","checked":"[[ \"$(blob-default-pdf-viewer)\" == \"zathura\" ]]","action":"blob-default-pdf-viewer zathura"},
"setup.default.pdf.firefox": {"icon":"","label":"Firefox","when":"blob-cmd-present firefox","checked":"[[ \"$(blob-default-pdf-viewer)\" == \"firefox\" ]]","action":"blob-default-pdf-viewer firefox"},
"setup.default.pdf.chromium": {"icon":"","label":"Chromium","when":"blob-cmd-present chromium","checked":"[[ \"$(blob-default-pdf-viewer)\" == \"chromium\" ]]","action":"blob-default-pdf-viewer chromium"},
"setup.plugin": {"icon":"󰐱","label":"Plugins","aliases":["plugin","plugins"]},
"setup.plugin.enable": {"icon":"󰄬","label":"Enable Plugin","action":"blob-menu-plugin enable"},
"setup.plugin.disable": {"icon":"󰅖","label":"Disable Plugin","action":"blob-menu-plugin disable"},
+9
View File
@@ -0,0 +1,9 @@
application/zip
application/x-7z-compressed
application/vnd.rar
application/x-tar
application/x-compressed-tar
application/gzip
application/x-xz
application/x-bzip2
application/zstd
+4
View File
@@ -0,0 +1,4 @@
application/vnd.oasis.opendocument.text
application/msword
application/vnd.openxmlformats-officedocument.wordprocessingml.document
application/rtf
+9
View File
@@ -0,0 +1,9 @@
image/png
image/jpeg
image/gif
image/webp
image/bmp
image/tiff
image/avif
image/heif
image/svg+xml
+6
View File
@@ -0,0 +1,6 @@
application/pdf
application/postscript
image/vnd.djvu
application/oxps
application/vnd.comicbook+zip
application/x-cbz
+3
View File
@@ -0,0 +1,3 @@
application/vnd.oasis.opendocument.presentation
application/vnd.ms-powerpoint
application/vnd.openxmlformats-officedocument.presentationml.presentation
+4
View File
@@ -0,0 +1,4 @@
application/vnd.oasis.opendocument.spreadsheet
application/vnd.ms-excel
application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
text/csv
+2
View File
@@ -0,0 +1,2 @@
text/plain
text/markdown
+12
View File
@@ -0,0 +1,12 @@
video/mp4
video/x-matroska
video/webm
video/quicktime
video/x-msvideo
video/mpeg
video/ogg
audio/mpeg
audio/flac
audio/ogg
audio/x-wav
audio/mp4
+4
View File
@@ -128,7 +128,11 @@ of the `blob` listing.
| --- | --- | --- |
| `blob-default-browser` | Set the default browser for Blob and XDG handlers | [chromium\|chrome\|brave\|brave-origin\|edge\|firefox\|zen] |
| `blob-default-editor` | Set the default editor used by blob-launch-editor | [code\|cursor\|zed\|sublime_text\|helix\|vim\|emacs\|nvim] |
| `blob-default-image-viewer` | Set the default image viewer | [loupe\|imv\|eog\|gwenview] |
| `blob-default-mime` | Get or set the application that opens one group of file types (hidden) | <image\|video\|pdf\|document\|spreadsheet\|presentation\|text\|archive> [desktop-id] |
| `blob-default-pdf-viewer` | Set the default PDF and document viewer | [evince\|papers\|okular\|zathura\|firefox\|chromium] |
| `blob-default-terminal` | Set the default terminal used by xdg-terminal-exec | [alacritty\|foot\|ghostty\|kitty] |
| `blob-default-video-player` | Set the default video and audio player | [mpv\|vlc\|celluloid\|totem] |
## disk
+5 -2
View File
@@ -19,7 +19,7 @@ with `--check`.
| `install/steps/services.sh` | system services, systemd drop-ins, user units |
| `install/steps/boot.sh` | the Plymouth boot splash, GRUB, and other-OS detection |
| `install/steps/theme.sh` | the wallpaper link, the first theme, the first background |
| `install/steps/apps.sh` | default applications for images, video, PDFs and office files |
| `install/steps/apps.sh` | default applications for images, video, PDFs, office files, text and archives, with the file types read from `default/mime/` |
| `install/steps/login.sh` | SDDM, the session entry, and the first launch |
| `install/steps/reload.sh` | reloading systemd, the user services, and a running session |
@@ -66,7 +66,10 @@ with `--check`.
images, `mpv` for video and audio, `evince` for PDFs and other documents, LibreOffice for
documents, spreadsheets and presentations, GNOME Text Editor for text, and
File Roller for archives. A file type that already has a
default there is left alone. See [packages.md](packages.md#desktop-applications).
default there is left alone. The file types for each group are listed in
`default/mime/<group>.types`, and Setup > Defaults in the Blob menu changes
the image viewer, video player and PDF viewer later. See
[packages.md](packages.md#desktop-applications).
`~/.bashrc` gets one line sourcing `session/bashrc`. The line is added once,
a `.bak` is kept, and a `~/.bashrc` that already has it is left alone.
`session/profile.sh` also goes to `/etc/profile.d/blob.sh`, which sources
+15 -1
View File
@@ -180,7 +180,21 @@ the next boot, or now with `sudo systemctl start netbird@main`.
`install.sh` makes them the default for their file types through `xdg-mime`,
which writes `~/.config/mimeapps.list`. A type that already has a default in
that file is left alone, so a choice you made yourself always wins, and an app
that is not installed is skipped.
that is not installed is skipped. The file types for each group are listed once, in
`default/mime/<group>.types`, and read by both the installer and
`blob-default-mime`.
To change them later, use Setup > Defaults in the Blob menu, which has Image
Viewer, Video Player and PDF Viewer next to Browser, Terminal and Editor, or:
```
blob default image-viewer imv
blob default video-player vlc
blob default pdf-viewer zathura
```
Each lists only the apps it knows, shows only the installed ones in the menu,
and sets the whole group of file types at once.
## The boot splash
+16 -12
View File
@@ -1,14 +1,16 @@
mimeapps_file="$config_dir/mimeapps.list"
mime_types_dir="$repo_dir/default/mime"
default_app_associations=(
"org.gnome.Loupe.desktop:image/png image/jpeg image/gif image/webp image/bmp image/tiff image/avif image/heif image/svg+xml"
"mpv.desktop:video/mp4 video/x-matroska video/webm video/quicktime video/x-msvideo video/mpeg video/ogg audio/mpeg audio/flac audio/ogg audio/x-wav audio/mp4"
"org.gnome.Evince.desktop:application/pdf application/postscript image/vnd.djvu application/oxps application/vnd.comicbook+zip application/x-cbz"
"libreoffice-writer.desktop:application/vnd.oasis.opendocument.text application/msword application/vnd.openxmlformats-officedocument.wordprocessingml.document application/rtf"
"libreoffice-calc.desktop:application/vnd.oasis.opendocument.spreadsheet application/vnd.ms-excel application/vnd.openxmlformats-officedocument.spreadsheetml.sheet text/csv"
"libreoffice-impress.desktop:application/vnd.oasis.opendocument.presentation application/vnd.ms-powerpoint application/vnd.openxmlformats-officedocument.presentationml.presentation"
"org.gnome.TextEditor.desktop:text/plain text/markdown"
"org.gnome.FileRoller.desktop:application/zip application/x-7z-compressed application/vnd.rar application/x-tar application/x-compressed-tar application/gzip application/x-xz application/x-bzip2 application/zstd"
"org.gnome.Loupe.desktop:image"
"mpv.desktop:video"
"org.gnome.Evince.desktop:pdf"
"libreoffice-writer.desktop:document"
"libreoffice-calc.desktop:spreadsheet"
"libreoffice-impress.desktop:presentation"
"org.gnome.TextEditor.desktop:text"
"org.gnome.FileRoller.desktop:archive"
)
mime_default_chosen() {
@@ -26,15 +28,17 @@ install_default_apps() {
return 0
fi
local pending=() entry desktop_file mime_types mime_type
local pending=() entry desktop_file kind mime_type
for entry in "${default_app_associations[@]}"; do
desktop_file="${entry%%:*}"
mime_types="${entry#*:}"
kind="${entry#*:}"
[[ -f /usr/share/applications/$desktop_file ]] || continue
for mime_type in $mime_types; do
[[ -f $mime_types_dir/$kind.types ]] || continue
while IFS= read -r mime_type; do
[[ -n $mime_type ]] || continue
mime_default_chosen "$mime_type" && continue
pending+=("$desktop_file:$mime_type")
done
done <"$mime_types_dir/$kind.types"
done
if (( ${#pending[@]} == 0 )); then