From 50d3579d660005e751bd3ddba886b790b42e5ecb Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Thu, 2 Apr 2026 18:04:55 +0200 Subject: [PATCH 01/14] Don't use the names here since they break the all-themes setup in omarchy-nvim --- themes/lumon/neovim.lua | 1 - themes/retro-82/neovim.lua | 1 - 2 files changed, 2 deletions(-) diff --git a/themes/lumon/neovim.lua b/themes/lumon/neovim.lua index 0c6407c81b..b364ffdbee 100644 --- a/themes/lumon/neovim.lua +++ b/themes/lumon/neovim.lua @@ -1,7 +1,6 @@ return { { "omacom-io/lumon.nvim", - name = "lumon", priority = 1000, }, { diff --git a/themes/retro-82/neovim.lua b/themes/retro-82/neovim.lua index 871a218bb9..f824c8d2c5 100644 --- a/themes/retro-82/neovim.lua +++ b/themes/retro-82/neovim.lua @@ -1,7 +1,6 @@ return { { "OldJobobo/retro-82.nvim", - name = "retro-82", priority = 1000, }, { From 141edc262f260f802e2a72ed485d449957719cb5 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 22 Apr 2026 20:31:31 +0000 Subject: [PATCH 02/14] Quote OMARCHY_PATH in migration source command Agent-Logs-Url: https://github.com/basecamp/omarchy/sessions/36fb96d5-70fd-4365-9550-e7ff5f8735d1 Co-authored-by: dhh <2741+dhh@users.noreply.github.com> --- migrations/1776410469.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/migrations/1776410469.sh b/migrations/1776410469.sh index 24aab0d6dc..6f182c0438 100644 --- a/migrations/1776410469.sh +++ b/migrations/1776410469.sh @@ -2,7 +2,7 @@ echo "Add flags sourcing to hyprland.conf" HYPR_CONF=~/.config/hypr/hyprland.conf -source $OMARCHY_PATH/install/config/omarchy-toggles.sh +source "$OMARCHY_PATH/install/config/omarchy-toggles.sh" if [[ -f $HYPR_CONF ]] && ! grep -q "toggles/hypr/\*\.conf" "$HYPR_CONF"; then echo -e "\n# Toggle config flags dynamically\nsource = ~/.local/state/omarchy/toggles/hypr/*.conf" >> "$HYPR_CONF" From 4127c749fb633f363151a77f732c27d58f86bd42 Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Fri, 24 Apr 2026 10:16:31 +0200 Subject: [PATCH 03/14] Proper fix for using device dark mode in Chrome --- install/config/theme.sh | 2 +- migrations/1777018408.sh | 9 +++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) create mode 100644 migrations/1777018408.sh diff --git a/install/config/theme.sh b/install/config/theme.sh index 439ec08d81..0dab91adec 100644 --- a/install/config/theme.sh +++ b/install/config/theme.sh @@ -24,4 +24,4 @@ sudo mkdir -p /etc/brave/policies/managed sudo chmod a+rw /etc/brave/policies/managed # Default Chromium to follow system appearance ("device") instead of dark -echo '{"browser":{"theme":{"color_scheme":0}}}' | sudo tee /usr/lib/chromium/initial_preferences >/dev/null +echo '{"browser":{"theme":{"color_scheme":0,"color_scheme2":0}}}' | sudo tee /usr/lib/chromium/initial_preferences >/dev/null diff --git a/migrations/1777018408.sh b/migrations/1777018408.sh new file mode 100644 index 0000000000..af644b53e2 --- /dev/null +++ b/migrations/1777018408.sh @@ -0,0 +1,9 @@ +echo "Fix Chromium appearance mode to also set color_scheme2 (the field Chromium actually reads now)" + +echo '{"browser":{"theme":{"color_scheme":0,"color_scheme2":0}}}' | sudo tee /usr/lib/chromium/initial_preferences >/dev/null + +# Update existing Chromium profiles so color_scheme2 follows the system, not dark +PREFS="$HOME/.config/chromium/Default/Preferences" +if [[ -f "$PREFS" ]] && command -v jq &>/dev/null; then + jq '.browser.theme.color_scheme = 0 | .browser.theme.color_scheme2 = 0' "$PREFS" > "$PREFS.tmp" && mv "$PREFS.tmp" "$PREFS" +fi From 1eaddf97ea68375e98509794441a30d2f0c1c52f Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Fri, 1 May 2026 18:27:20 +0200 Subject: [PATCH 04/14] Quiet down so we don't get useless output spam --- bin/omarchy-theme-set-vscode | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bin/omarchy-theme-set-vscode b/bin/omarchy-theme-set-vscode index cc66ed0d97..703b156366 100755 --- a/bin/omarchy-theme-set-vscode +++ b/bin/omarchy-theme-set-vscode @@ -14,8 +14,8 @@ set_theme() { theme_name=$(jq -r '.name' "$VS_CODE_THEME") extension=$(jq -r '.extension' "$VS_CODE_THEME") - if [[ -n $extension ]] && ! "$editor_cmd" --list-extensions | grep -Fxq "$extension"; then - "$editor_cmd" --install-extension "$extension" >/dev/null + if [[ -n $extension ]] && ! "$editor_cmd" --list-extensions 2>/dev/null | grep -Fxq "$extension"; then + "$editor_cmd" --install-extension "$extension" >/dev/null 2>&1 fi mkdir -p "$(dirname "$settings_path")" From ff23d01fce88ed6cb633eb25916023ede124e27e Mon Sep 17 00:00:00 2001 From: Bruno da Silva Date: Fri, 1 May 2026 21:24:41 -0300 Subject: [PATCH 05/14] FIX: Bistream typo to Bitstream in three places --- bin/omarchy-menu | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bin/omarchy-menu b/bin/omarchy-menu index 54ed2fbcf3..5687e734b8 100755 --- a/bin/omarchy-menu +++ b/bin/omarchy-menu @@ -404,12 +404,12 @@ show_install_style_menu() { } show_install_font_menu() { - case $(menu "Install" " Cascadia Mono\n Meslo LG Mono\n Fira Code\n Victor Code\n Bistream Vera Mono\n Iosevka" "--width 350") in + case $(menu "Install" " Cascadia Mono\n Meslo LG Mono\n Fira Code\n Victor Code\n Bitstream Vera Mono\n Iosevka" "--width 350") in *Cascadia*) install_font "Cascadia Mono" "ttf-cascadia-mono-nerd" "CaskaydiaMono Nerd Font" ;; *Meslo*) install_font "Meslo LG Mono" "ttf-meslo-nerd" "MesloLGL Nerd Font" ;; *Fira*) install_font "Fira Code" "ttf-firacode-nerd" "FiraCode Nerd Font" ;; *Victor*) install_font "Victor Code" "ttf-victor-mono-nerd" "VictorMono Nerd Font" ;; - *Bistream*) install_font "Bistream Vera Code" "ttf-bitstream-vera-mono-nerd" "BitstromWera Nerd Font" ;; + *Bitstream*) install_font "Bitstream Vera Code" "ttf-bitstream-vera-mono-nerd" "BitstromWera Nerd Font" ;; *Iosevka*) install_font "Iosevka" "ttf-iosevka-nerd" "Iosevka Nerd Font Mono" ;; *) show_install_menu ;; esac From ea7979a0570be9cc828507bdf207a08d1ae67b78 Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Sat, 2 May 2026 13:47:55 +0200 Subject: [PATCH 06/14] No quoting needed for bash 5 --- bin/omarchy-hyprland-monitor-scaling-cycle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/omarchy-hyprland-monitor-scaling-cycle b/bin/omarchy-hyprland-monitor-scaling-cycle index b5aeb5280e..32f61e50bb 100755 --- a/bin/omarchy-hyprland-monitor-scaling-cycle +++ b/bin/omarchy-hyprland-monitor-scaling-cycle @@ -37,7 +37,7 @@ hyprctl keyword monitor "$ACTIVE_MONITOR,${WIDTH}x${HEIGHT}@${REFRESH_RATE},auto # Persist to monitors.conf if the user has a single generic catch-all line # (ignoring disabled monitors), so the scale survives reboots. MONITOR_CONF="$HOME/.config/hypr/monitors.conf" -if [[ -f "$MONITOR_CONF" ]]; then +if [[ -f $MONITOR_CONF ]]; then mapfile -t ACTIVE_LINES < <(grep -E '^[[:space:]]*monitor=' "$MONITOR_CONF" | grep -vE 'disable[[:space:]]*$') if [[ ${#ACTIVE_LINES[@]} -eq 1 ]] && [[ "${ACTIVE_LINES[0]}" =~ ^monitor=,preferred,auto, ]]; then sed -i -E "s|^(monitor=,preferred,auto,).*|\\1${NEW_SCALE}|" "$MONITOR_CONF" From 0a5cd43aacac010e8861b788aadda63d376d0a76 Mon Sep 17 00:00:00 2001 From: Ryan Hughes Date: Mon, 4 May 2026 19:44:41 -0400 Subject: [PATCH 07/14] Add migration to handle lingering panel_replay addition --- migrations/1777909712.sh | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 migrations/1777909712.sh diff --git a/migrations/1777909712.sh b/migrations/1777909712.sh new file mode 100644 index 0000000000..60c738a19e --- /dev/null +++ b/migrations/1777909712.sh @@ -0,0 +1,10 @@ +echo "Remove stale Xe Panel Replay kernel cmdline from Dell XPS Panther Lake systems" + +DEFAULT_LIMINE="/etc/default/limine" + +if omarchy-hw-match "XPS" && omarchy-hw-intel-ptl; then + if [[ -f $DEFAULT_LIMINE ]] && grep -q 'xe\.enable_panel_replay' "$DEFAULT_LIMINE"; then + sudo sed -i '/^KERNEL_CMDLINE.*xe\.enable_panel_replay/d' "$DEFAULT_LIMINE" + sudo limine-update + fi +fi From a3aedb0c4d0127b4f3138b1264a5611aecaaa72e Mon Sep 17 00:00:00 2001 From: Ryan Hughes Date: Mon, 4 May 2026 19:46:42 -0400 Subject: [PATCH 08/14] Version bump --- version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/version b/version index 7c69a55dbb..a76ccff2a6 100644 --- a/version +++ b/version @@ -1 +1 @@ -3.7.0 +3.7.1 From dc8ad1dace6c4e75b18cd11cb3036f1673f1ed26 Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Wed, 6 May 2026 21:03:43 +0200 Subject: [PATCH 09/14] Use proper .desktop files --- applications/foot-server.desktop | 4 ---- applications/footclient.desktop | 4 ---- applications/hidden/foot-server.desktop | 2 ++ applications/hidden/footclient.desktop | 2 ++ bin/omarchy-install-terminal | 5 ++++- bin/omarchy-refresh-applications | 4 ++++ {applications => default/foot}/foot.desktop | 0 migrations/1778008689.sh | 6 +++--- 8 files changed, 15 insertions(+), 12 deletions(-) delete mode 100644 applications/foot-server.desktop delete mode 100644 applications/footclient.desktop create mode 100644 applications/hidden/foot-server.desktop create mode 100644 applications/hidden/footclient.desktop rename {applications => default/foot}/foot.desktop (100%) diff --git a/applications/foot-server.desktop b/applications/foot-server.desktop deleted file mode 100644 index 0ab86d6525..0000000000 --- a/applications/foot-server.desktop +++ /dev/null @@ -1,4 +0,0 @@ -[Desktop Entry] -Type=Application -Name=Foot Server -NoDisplay=true diff --git a/applications/footclient.desktop b/applications/footclient.desktop deleted file mode 100644 index e459008771..0000000000 --- a/applications/footclient.desktop +++ /dev/null @@ -1,4 +0,0 @@ -[Desktop Entry] -Type=Application -Name=Foot Client -NoDisplay=true diff --git a/applications/hidden/foot-server.desktop b/applications/hidden/foot-server.desktop new file mode 100644 index 0000000000..e1e3e17323 --- /dev/null +++ b/applications/hidden/foot-server.desktop @@ -0,0 +1,2 @@ +[Desktop Entry] +Hidden=true diff --git a/applications/hidden/footclient.desktop b/applications/hidden/footclient.desktop new file mode 100644 index 0000000000..e1e3e17323 --- /dev/null +++ b/applications/hidden/footclient.desktop @@ -0,0 +1,2 @@ +[Desktop Entry] +Hidden=true diff --git a/bin/omarchy-install-terminal b/bin/omarchy-install-terminal index 15a869d166..2fb040ddd2 100755 --- a/bin/omarchy-install-terminal +++ b/bin/omarchy-install-terminal @@ -28,9 +28,12 @@ echo "Installing $package..." # Install package if omarchy-pkg-add $package; then # Copy custom desktop entries with X-TerminalArg* keys - if [[ $package == "alacritty" || $package == "foot" ]]; then + if [[ $package == "alacritty" ]]; then mkdir -p ~/.local/share/applications cp "$OMARCHY_PATH/applications/$desktop_id" ~/.local/share/applications/ + elif [[ $package == "foot" ]]; then + mkdir -p ~/.local/share/applications + cp "$OMARCHY_PATH/default/foot/$desktop_id" ~/.local/share/applications/ fi # Copy default config for optional terminals when missing diff --git a/bin/omarchy-refresh-applications b/bin/omarchy-refresh-applications index 50c55ed290..9eb4e9de8a 100755 --- a/bin/omarchy-refresh-applications +++ b/bin/omarchy-refresh-applications @@ -11,6 +11,10 @@ mkdir -p ~/.local/share/applications cp ~/.local/share/omarchy/applications/*.desktop ~/.local/share/applications/ cp ~/.local/share/omarchy/applications/hidden/*.desktop ~/.local/share/applications/ +if omarchy-cmd-present foot; then + cp ~/.local/share/omarchy/default/foot/foot.desktop ~/.local/share/applications/ +fi + # Refresh the webapps, TUIs, and npx wrappers bash $OMARCHY_PATH/install/packaging/icons.sh bash $OMARCHY_PATH/install/packaging/webapps.sh diff --git a/applications/foot.desktop b/default/foot/foot.desktop similarity index 100% rename from applications/foot.desktop rename to default/foot/foot.desktop diff --git a/migrations/1778008689.sh b/migrations/1778008689.sh index dbe977432a..de066e7211 100644 --- a/migrations/1778008689.sh +++ b/migrations/1778008689.sh @@ -31,9 +31,9 @@ fi if omarchy-cmd-present foot; then mkdir -p ~/.local/share/applications rm -f ~/.local/share/applications/org.codeberg.dnkl.foot.desktop - cp -Rpf "$OMARCHY_PATH/applications/foot.desktop" ~/.local/share/applications/ - cp -Rpf "$OMARCHY_PATH/applications/footclient.desktop" ~/.local/share/applications/ - cp -Rpf "$OMARCHY_PATH/applications/foot-server.desktop" ~/.local/share/applications/ + cp -Rpf "$OMARCHY_PATH/default/foot/foot.desktop" ~/.local/share/applications/ + cp -Rpf "$OMARCHY_PATH/applications/hidden/footclient.desktop" ~/.local/share/applications/ + cp -Rpf "$OMARCHY_PATH/applications/hidden/foot-server.desktop" ~/.local/share/applications/ fi if [[ -f ~/.config/hypr/input.conf ]]; then From d4ffa9e39d7eadf8085e34b5566deaeb22a5508e Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Wed, 6 May 2026 21:05:24 +0200 Subject: [PATCH 10/14] Just focus on the window rules --- migrations/1778008689.sh | 38 +------------------------------------- 1 file changed, 1 insertion(+), 37 deletions(-) diff --git a/migrations/1778008689.sh b/migrations/1778008689.sh index de066e7211..2baefc5491 100644 --- a/migrations/1778008689.sh +++ b/migrations/1778008689.sh @@ -1,40 +1,4 @@ -echo "Add Foot terminal config and theme support" - -if [[ ! -f ~/.config/foot/foot.ini ]]; then - mkdir -p ~/.config/foot - cp -Rpf "$OMARCHY_PATH/config/foot/foot.ini" ~/.config/foot/foot.ini -elif ! grep -q "^primary-paste=none" ~/.config/foot/foot.ini; then - sed -i '/^clipboard-copy=Control+Insert/a primary-paste=none' ~/.config/foot/foot.ini -fi - -if [[ -f ~/.config/omarchy/current/theme/foot.ini ]]; then - sed -i 's/^\[colors\]$/[colors-dark]/' ~/.config/omarchy/current/theme/foot.ini -fi - -if [[ ! -f ~/.config/omarchy/current/theme/foot.ini && -f ~/.config/omarchy/current/theme/colors.toml ]]; then - sed_script=$(mktemp) - - while IFS='=' read -r key value; do - key="${key//[\"\' ]/}" - [[ $key && $key != \#* ]] || continue - value="${value#*[\"\']}" - value="${value%%[\"\']*}" - - printf 's|{{ %s }}|%s|g\n' "$key" "$value" - printf 's|{{ %s_strip }}|%s|g\n' "$key" "${value#\#}" - done <~/.config/omarchy/current/theme/colors.toml >"$sed_script" - - sed -f "$sed_script" "$OMARCHY_PATH/default/themed/foot.ini.tpl" >~/.config/omarchy/current/theme/foot.ini - rm "$sed_script" -fi - -if omarchy-cmd-present foot; then - mkdir -p ~/.local/share/applications - rm -f ~/.local/share/applications/org.codeberg.dnkl.foot.desktop - cp -Rpf "$OMARCHY_PATH/default/foot/foot.desktop" ~/.local/share/applications/ - cp -Rpf "$OMARCHY_PATH/applications/hidden/footclient.desktop" ~/.local/share/applications/ - cp -Rpf "$OMARCHY_PATH/applications/hidden/foot-server.desktop" ~/.local/share/applications/ -fi +echo "Add Foot terminal window rules where terminals are described" if [[ -f ~/.config/hypr/input.conf ]]; then sed -Ei 's/match:class \(Alacritty\|kitty\)/match:class (Alacritty|kitty|foot)/' ~/.config/hypr/input.conf From 3a240c783882214a8afb6d009eee1ecee9908550 Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Thu, 7 May 2026 15:09:53 +0200 Subject: [PATCH 11/14] Add note about correct perms for migrations --- AGENTS.md | 1 + 1 file changed, 1 insertion(+) diff --git a/AGENTS.md b/AGENTS.md index c5eea9b854..cc9ec8537b 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -107,6 +107,7 @@ This copies `~/.local/share/omarchy/config/hypr/hyprlock.conf` to `~/.config/hyp To create a new migration, run `omarchy-dev-add-migration --no-edit`. This creates a migration file named after the unix timestamp of the last commit. New migration format: +- File permissions must be `0644` (`-rw-r--r--`); migrations are sourced, not executed directly - No shebang line - Start with an `echo` describing what the migration does - Use `$OMARCHY_PATH` to reference the omarchy directory From 27b598a6e57e0ddeae3180dc62d6bdb8687c12c9 Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Fri, 8 May 2026 22:07:38 +0200 Subject: [PATCH 12/14] Fix guidance --- default/omarchy-skill/SKILL.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/default/omarchy-skill/SKILL.md b/default/omarchy-skill/SKILL.md index 8aa5ffaf7e..37ae3d1244 100644 --- a/default/omarchy-skill/SKILL.md +++ b/default/omarchy-skill/SKILL.md @@ -356,7 +356,7 @@ When user requests system changes: 2. **Is it a config edit?** Edit in `~/.config/`, never `~/.local/share/omarchy/` 3. **Is it a theme customization?** Create a NEW custom theme directory 4. **Is it automation?** Use hooks in `~/.config/omarchy/hooks/` -5. **Is it a package install?** Use `omarchy install package ` (or `omarchy pkg aur add ` for AUR-only packages) +5. **Is it a package install?** Use `omarchy pkg add ` (or `omarchy pkg aur add ` for AUR-only packages) 6. **Unsure if command exists?** Run `omarchy commands` (or `omarchy --help` for one group) ### Reminder Requests From b2d95ee24b09667e652674d8b33eeecad0f528f2 Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Sun, 10 May 2026 16:47:21 +0200 Subject: [PATCH 13/14] libretro-vice is now an explosion of minor pkgs --- bin/omarchy-install-gaming-retroarch | 5 ++++- bin/omarchy-remove-gaming-retroarch | 5 ++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/bin/omarchy-install-gaming-retroarch b/bin/omarchy-install-gaming-retroarch index 828acfc461..3ebfea77c3 100755 --- a/bin/omarchy-install-gaming-retroarch +++ b/bin/omarchy-install-gaming-retroarch @@ -21,7 +21,10 @@ omarchy-pkg-add \ libretro-parallel-n64 libretro-picodrive libretro-play libretro-ppsspp \ libretro-sameboy libretro-scummvm libretro-shaders-slang libretro-snes9x \ libretro-yabause \ - libretro-cap32-git libretro-fbneo-git libretro-uae-git libretro-vice-git \ + libretro-cap32-git libretro-fbneo-git libretro-uae-git \ + libretro-vice-x128-git libretro-vice-x64-git libretro-vice-x64dtv-git libretro-vice-x64sc-git \ + libretro-vice-xcbm2-git libretro-vice-xcbm5x0-git libretro-vice-xpet-git \ + libretro-vice-xplus4-git libretro-vice-xscpu64-git libretro-vice-xvic-git \ libretro-database-git \ retroarch-joypad-autoconfig-git diff --git a/bin/omarchy-remove-gaming-retroarch b/bin/omarchy-remove-gaming-retroarch index 16e549f2fe..82e0a8dc10 100755 --- a/bin/omarchy-remove-gaming-retroarch +++ b/bin/omarchy-remove-gaming-retroarch @@ -21,7 +21,10 @@ omarchy-pkg-drop \ libretro-parallel-n64 libretro-picodrive libretro-play libretro-ppsspp \ libretro-sameboy libretro-scummvm libretro-shaders-slang libretro-snes9x \ libretro-yabause \ - libretro-cap32-git libretro-fbneo-git libretro-uae-git libretro-vice-git \ + libretro-cap32-git libretro-fbneo-git libretro-uae-git \ + libretro-vice-x128-git libretro-vice-x64-git libretro-vice-x64dtv-git libretro-vice-x64sc-git \ + libretro-vice-xcbm2-git libretro-vice-xcbm5x0-git libretro-vice-xpet-git \ + libretro-vice-xplus4-git libretro-vice-xscpu64-git libretro-vice-xvic-git \ retroarch-joypad-autoconfig-git rm -rf \ From 30bb098b1f0cbedcc9e73818ea0f91edd0d17686 Mon Sep 17 00:00:00 2001 From: Pa sen Date: Wed, 13 May 2026 12:00:40 +1000 Subject: [PATCH 14/14] Add Copy file path to Nautilus right-click context menu Adds a nautilus-python extension that lets users copy absolute file/folder paths to the clipboard via wl-copy. Shows 'Copy file path' for single selection and 'Copy file paths' for multi-select. --- .../extensions/copy-filepath.py | 56 +++++++++++++++++++ install/config/nautilus-python.sh | 1 + 2 files changed, 57 insertions(+) create mode 100644 default/nautilus-python/extensions/copy-filepath.py diff --git a/default/nautilus-python/extensions/copy-filepath.py b/default/nautilus-python/extensions/copy-filepath.py new file mode 100644 index 0000000000..34087d11e8 --- /dev/null +++ b/default/nautilus-python/extensions/copy-filepath.py @@ -0,0 +1,56 @@ +import shutil + +from gi import require_version + +require_version("Nautilus", "4.1") + +from gi.repository import GObject, Gio, GLib, Nautilus + + +class CopyFilePathAction(GObject.GObject, Nautilus.MenuProvider): + def _selected_paths(self, files): + paths = [] + seen = set() + + for file in files: + location = file.get_location() + if not location: + continue + + path = location.get_path() + if path and path not in seen: + seen.add(path) + paths.append(path) + + return paths + + def _make_item(self, paths): + label = "Copy file path" if len(paths) == 1 else "Copy file paths" + item = Nautilus.MenuItem( + name="OmarchyCopyFilePath::copy_file_path", + label=label, + icon="edit-copy", + ) + item.connect("activate", self._on_activate, paths) + return item + + def _on_activate(self, _menu, paths): + text = "\n".join(paths) + + proc = Gio.Subprocess.new( + ["wl-copy", "--type", "text/plain"], + Gio.SubprocessFlags.STDIN_PIPE + | Gio.SubprocessFlags.STDOUT_SILENCE + | Gio.SubprocessFlags.STDERR_SILENCE, + ) + if proc: + proc.communicate(GLib.Bytes.new(text.encode("utf-8")), cancellable=None) + + def get_file_items(self, *args): + files = args[0] if len(args) == 1 else args[1] + paths = self._selected_paths(files) + + if not paths or not shutil.which("wl-copy"): + return [] + + return [self._make_item(paths)] diff --git a/install/config/nautilus-python.sh b/install/config/nautilus-python.sh index 76266353e3..d4e02cf1e1 100644 --- a/install/config/nautilus-python.sh +++ b/install/config/nautilus-python.sh @@ -3,3 +3,4 @@ EXTENSIONS_DIR="$HOME/.local/share/nautilus-python/extensions" mkdir -p "$EXTENSIONS_DIR" cp "$OMARCHY_PATH/default/nautilus-python/extensions/localsend.py" "$EXTENSIONS_DIR/" cp "$OMARCHY_PATH/default/nautilus-python/extensions/transcode.py" "$EXTENSIONS_DIR/" +cp "$OMARCHY_PATH/default/nautilus-python/extensions/copy-filepath.py" "$EXTENSIONS_DIR/"