diff --git a/bin/omarchy-default-filemanager b/bin/omarchy-default-filemanager new file mode 100644 index 00000000000..33688279f17 --- /dev/null +++ b/bin/omarchy-default-filemanager @@ -0,0 +1,60 @@ +#!/bin/bash + +# omarchy:summary=Set the default file manager for Omarchy and XDG handlers +# omarchy:args=[nautilus|dolphin|thunar|nemo|pcmanfm] +# omarchy:examples=omarchy default filemanager nautilus | omarchy default filemanager dolphin + +installing=false +if [[ ${1:-} == "--install" ]]; then + installing=true + shift +fi + +if (($# == 0)); then + desktop_id=$(xdg-mime query default inode/directory 2>/dev/null || true) + case "$desktop_id" in + org.gnome.Nautilus.desktop | nautilus.desktop) echo "nautilus" ;; + org.kde.dolphin.desktop | dolphin.desktop) echo "dolphin" ;; + thunar.desktop) echo "thunar" ;; + nemo.desktop) echo "nemo" ;; + pcmanfm.desktop) echo "pcmanfm" ;; + *) + if [[ -n $desktop_id ]]; then + echo "$desktop_id" + else + echo "nautilus" + fi + ;; + esac + exit 0 +fi + +case "$1" in +nautilus) filemanager="nautilus"; command="nautilus"; desktop_id="org.gnome.Nautilus.desktop"; name="Nautilus (Files)"; glyph= ;; +dolphin) filemanager="dolphin"; command="dolphin"; desktop_id="org.kde.dolphin.desktop"; name="Dolphin"; glyph= ;; +thunar) filemanager="thunar"; command="thunar"; desktop_id="thunar.desktop"; name="Thunar"; glyph= ;; +nemo) filemanager="nemo"; command="nemo"; desktop_id="nemo.desktop"; name="Nemo"; glyph= ;; +pcmanfm) filemanager="pcmanfm"; command="pcmanfm"; desktop_id="pcmanfm.desktop"; name="PCManFM"; glyph= ;; +*) + echo "Usage: omarchy-default-filemanager " + exit 1 + ;; +esac + +if omarchy-cmd-missing "$command"; then + if [[ $installing == "false" ]]; then + exec omarchy-launch-floating-terminal-with-presentation omarchy-default-filemanager --install "$filemanager" + else + case "$filemanager" in + nautilus) omarchy-pkg-add nautilus ;; + dolphin) omarchy-pkg-add dolphin ;; + thunar) omarchy-pkg-add thunar ;; + nemo) omarchy-pkg-add nemo ;; + pcmanfm) omarchy-pkg-add pcmanfm ;; + esac || exit 1 + fi +fi + +xdg-mime default "$desktop_id" inode/directory || exit 1 + +omarchy-notification-send -g $glyph "$name is now the default file manager" diff --git a/bin/omarchy-launch-filemanager b/bin/omarchy-launch-filemanager new file mode 100644 index 00000000000..99649a59860 --- /dev/null +++ b/bin/omarchy-launch-filemanager @@ -0,0 +1,19 @@ +#!/bin/bash + +# omarchy:summary=Launch the default file manager determined by xdg-mime +# omarchy:args=[directory] + +default_fm=$(xdg-mime query default inode/directory 2>/dev/null) +if [[ -z $default_fm ]]; then + default_fm="org.gnome.Nautilus.desktop" +fi + +fm_exec=$(sed -n 's/^Exec=\([^ ]*\).*/\1/p' {~/.local,~/.nix-profile,/usr}/share/applications/$default_fm 2>/dev/null | head -1) + +if [[ -z $fm_exec ]]; then + fm_exec="nautilus" +fi + +target_dir="${1:-$HOME}" + +exec setsid uwsm-app -- "$fm_exec" "$target_dir" diff --git a/bin/omarchy-launch-filemanager-cwd b/bin/omarchy-launch-filemanager-cwd new file mode 100644 index 00000000000..b03045d370e --- /dev/null +++ b/bin/omarchy-launch-filemanager-cwd @@ -0,0 +1,6 @@ +#!/bin/bash + +# omarchy:summary=Launch the default file manager in the active terminal's current directory + +dir=$(omarchy-cmd-terminal-cwd 2>/dev/null) +exec omarchy-launch-filemanager "${dir:-$HOME}" diff --git a/default/hypr/bindings/applications.lua b/default/hypr/bindings/applications.lua index 0c990e64ae6..60c001635a5 100644 --- a/default/hypr/bindings/applications.lua +++ b/default/hypr/bindings/applications.lua @@ -1,8 +1,8 @@ -- Essential application bindings. o.bind("SUPER + RETURN", "Terminal", { omarchy = "terminal" }) o.bind("SUPER + SHIFT + RETURN", "Browser", { omarchy = "browser" }) -o.bind("SUPER + SHIFT + F", "File manager", { omarchy = "nautilus" }) -o.bind("SUPER + ALT + SHIFT + F", "File manager (cwd)", { omarchy = "nautilus-cwd" }) +o.bind("SUPER + SHIFT + F", "File manager", { omarchy = "filemanager" }) +o.bind("SUPER + ALT + SHIFT + F", "File manager (cwd)", { omarchy = "filemanager-cwd" }) o.bind("SUPER + SHIFT + B", "Browser", { omarchy = "browser" }) o.bind("SUPER + SHIFT + ALT + B", "Browser (private)", { omarchy = "browser --private" }) o.bind("SUPER + SHIFT + N", "Editor", { omarchy = "editor" }) diff --git a/default/omarchy/omarchy-menu.jsonc b/default/omarchy/omarchy-menu.jsonc index a81b4baa50b..2ab79965310 100644 --- a/default/omarchy/omarchy-menu.jsonc +++ b/default/omarchy/omarchy-menu.jsonc @@ -170,6 +170,12 @@ "setup.default.editor.helix": {"icon":"","label":"Helix","checked":"[[ \"$(omarchy-default-editor)\" == \"helix\" ]]","action":"omarchy-default-editor helix"}, "setup.default.editor.vim": {"icon":"","label":"Vim","checked":"[[ \"$(omarchy-default-editor)\" == \"vim\" ]]","action":"omarchy-default-editor vim"}, "setup.default.editor.emacs": {"icon":"","label":"Emacs","checked":"[[ \"$(omarchy-default-editor)\" == \"emacs\" ]]","action":"omarchy-default-editor emacs"}, + "setup.default.filemanager": {"icon":"","label":"File Manager","title":"Default File Manager"}, + "setup.default.filemanager.nautilus": {"icon":"","label":"Nautilus (Files)","checked":"[[ \"$(omarchy-default-filemanager)\" == \"nautilus\" ]]","action":"omarchy-default-filemanager nautilus"}, + "setup.default.filemanager.dolphin": {"icon":"","label":"Dolphin","checked":"[[ \"$(omarchy-default-filemanager)\" == \"dolphin\" ]]","action":"omarchy-default-filemanager dolphin"}, + "setup.default.filemanager.thunar": {"icon":"","label":"Thunar","checked":"[[ \"$(omarchy-default-filemanager)\" == \"thunar\" ]]","action":"omarchy-default-filemanager thunar"}, + "setup.default.filemanager.nemo": {"icon":"","label":"Nemo","checked":"[[ \"$(omarchy-default-filemanager)\" == \"nemo\" ]]","action":"omarchy-default-filemanager nemo"}, + "setup.default.filemanager.pcmanfm": {"icon":"","label":"PCManFM","checked":"[[ \"$(omarchy-default-filemanager)\" == \"pcmanfm\" ]]","action":"omarchy-default-filemanager pcmanfm"}, "setup.plugin": {"icon":"󰐱","label":"Plugins","aliases":["plugin","plugins"]}, "setup.plugin.enable": {"icon":"󰄬","label":"Enable Plugin","action":"omarchy-menu-plugin enable"}, "setup.plugin.disable": {"icon":"󰅖","label":"Disable Plugin","action":"omarchy-menu-plugin disable"},