Add image viewer, video player and PDF viewer defaults to the menu
This commit is contained in:
1 parent
5732986fee
commit
1f86bfd151
17 files changed
+226
-15
No files matched your search
Executable
+31
@@ -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"
|
||||
Executable
+23
@@ -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[@]}"
|
||||
Executable
+35
@@ -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"
|
||||
Executable
+31
@@ -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"
|
||||
@@ -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"},
|
||||
|
||||
@@ -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
|
||||
@@ -0,0 +1,4 @@
|
||||
application/vnd.oasis.opendocument.text
|
||||
application/msword
|
||||
application/vnd.openxmlformats-officedocument.wordprocessingml.document
|
||||
application/rtf
|
||||
@@ -0,0 +1,9 @@
|
||||
image/png
|
||||
image/jpeg
|
||||
image/gif
|
||||
image/webp
|
||||
image/bmp
|
||||
image/tiff
|
||||
image/avif
|
||||
image/heif
|
||||
image/svg+xml
|
||||
@@ -0,0 +1,6 @@
|
||||
application/pdf
|
||||
application/postscript
|
||||
image/vnd.djvu
|
||||
application/oxps
|
||||
application/vnd.comicbook+zip
|
||||
application/x-cbz
|
||||
@@ -0,0 +1,3 @@
|
||||
application/vnd.oasis.opendocument.presentation
|
||||
application/vnd.ms-powerpoint
|
||||
application/vnd.openxmlformats-officedocument.presentationml.presentation
|
||||
@@ -0,0 +1,4 @@
|
||||
application/vnd.oasis.opendocument.spreadsheet
|
||||
application/vnd.ms-excel
|
||||
application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
|
||||
text/csv
|
||||
@@ -0,0 +1,2 @@
|
||||
text/plain
|
||||
text/markdown
|
||||
@@ -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
|
||||
@@ -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
@@ -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
@@ -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
@@ -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
|
||||
|
||||
Reference in new issue
Block a user