about summary refs log tree commit diff stats
path: root/modules/by-name/xd/xdg
diff options
context:
space:
mode:
Diffstat (limited to 'modules/by-name/xd/xdg')
-rw-r--r--modules/by-name/xd/xdg/module.nix123
-rwxr-xr-xmodules/by-name/xd/xdg/scripts/lf-wrapper.sh (renamed from modules/by-name/xd/xdg/lf-wrapper.sh)0
-rwxr-xr-xmodules/by-name/xd/xdg/scripts/url-handler.sh18
3 files changed, 109 insertions, 32 deletions
diff --git a/modules/by-name/xd/xdg/module.nix b/modules/by-name/xd/xdg/module.nix
index 1202cd96..f1781d86 100644
--- a/modules/by-name/xd/xdg/module.nix
+++ b/modules/by-name/xd/xdg/module.nix
@@ -1,60 +1,119 @@
 {
   pkgs,
   lib,
+  config,
   ...
 }: let
-  cmd = pkgs.writeShellApplication {
-    name = "lf_wrapper";
+  lf-wrapper = pkgs.writeShellApplication {
+    name = "lf-wrapper";
 
     runtimeInputs = [pkgs.lf pkgs.alacritty];
     inheritPath = true;
 
-    text = builtins.readFile ./lf-wrapper.sh;
+    text = builtins.readFile ./scripts/lf-wrapper.sh;
+  };
+
+  url-handler = pkgs.writeShellApplication {
+    name = "url-handler";
+
+    runtimeInputs = [pkgs.rofi pkgs.libnotify pkgs.zathura pkgs.tskm];
+    inheritPath = false;
+
+    text = builtins.readFile ./scripts/url-handler.sh;
   };
 
   tfcConfigFile = (pkgs.formats.ini {}).generate "xdg-desktop-portal-termfilechooser.ini" {
     filechooser = {
       default_dir = "/tmp";
-      cmd = "${lib.getExe cmd}";
+      cmd = "${lib.getExe lf-wrapper}";
     };
   };
+
+  cfg = config.soispha.xdg;
 in {
-  services.dbus.enable = true;
-  xdg = {
-    portal = {
-      enable = true;
-      wlr = {
+  options.soispha.xdg = {
+    enable = lib.mkEnableOption "xdg";
+  };
+
+  config = lib.mkIf cfg.enable {
+    home-manager.users.soispha = {
+      xdg = {
+        desktopEntries = {
+          url-handler = {
+            name = "url-handler";
+            genericName = "Web Browser";
+            exec = "${lib.getExe url-handler} %u";
+            terminal = false;
+            categories = [
+              "Application"
+              "Network"
+              "WebBrowser"
+            ];
+            mimeType = [
+              "text/html"
+              "text/xml"
+              "x-scheme-handler/http"
+              "x-scheme-handler/https"
+              "x-scheme-handler/about"
+              "x-scheme-handler/unknown"
+            ];
+          };
+        };
+      };
+    };
+
+    services.dbus.enable = true;
+
+    xdg = {
+      mime = {
         enable = true;
+        defaultApplications = {
+          "application/pdf" = ["url-handler.desktop"];
+          "application/x-pdf" = ["url-handler.desktop"];
+
+          "text/html" = ["url-handler.desktop"];
+          "text/xml" = ["url-handler.desktop"];
+          "x-scheme-handler/http" = ["url-handler.desktop"];
+          "x-scheme-handler/https" = ["url-handler.desktop"];
+          "x-scheme-handler/about" = ["url-handler.desktop"];
+          "x-scheme-handler/unknown" = ["url-handler.desktop"];
+        };
       };
-      config = {
-        common = {
-          # NOTE: The next entry is supposedly needed for gtk based apps <2023-08-31>
-          default = ["wlr" "gtk"];
-          "org.freedesktop.impl.portal.FileChooser" = ["termfilechooser"];
+
+      portal = {
+        enable = true;
+        wlr = {
+          enable = true;
         };
+        config = {
+          common = {
+            # NOTE: The next entry is supposedly needed for gtk based apps <2023-08-31>
+            default = ["wlr" "gtk"];
+            "org.freedesktop.impl.portal.FileChooser" = ["termfilechooser"];
+          };
 
-        # TODO: Also activate, when on another wlr-based compositor <2023-11-25>
-        river = {
-          default = ["wlr" "gtk"];
-          "org.freedesktop.impl.portal.FileChooser" = ["termfilechooser"];
+          # TODO: Also activate, when on another wlr-based compositor <2023-11-25>
+          river = {
+            default = ["wlr" "gtk"];
+            "org.freedesktop.impl.portal.FileChooser" = ["termfilechooser"];
+          };
         };
-      };
 
-      extraPortals = [
-        pkgs.xdg-desktop-portal-gtk
-        pkgs.xdg-desktop-portal-wlr
-        pkgs.xdg-desktop-portal-termfilechooser
-      ];
+        extraPortals = [
+          pkgs.xdg-desktop-portal-gtk
+          pkgs.xdg-desktop-portal-wlr
+          pkgs.xdg-desktop-portal-termfilechooser
+        ];
+      };
     };
-  };
 
-  environment.etc."xdg/xdg-desktop-portal-termfilechooser/config".source = tfcConfigFile;
+    environment.etc."xdg/xdg-desktop-portal-termfilechooser/config".source = tfcConfigFile;
 
-  systemd.user.services.xdg-desktop-portal-termfilechooser = {
-    serviceConfig.ExecStart = [
-      ""
-      "${pkgs.xdg-desktop-portal-termfilechooser}/libexec/xdg-desktop-portal-termfilechooser --loglevel=TRACE"
-    ];
+    systemd.user.services.xdg-desktop-portal-termfilechooser = {
+      serviceConfig.ExecStart = [
+        ""
+        "${pkgs.xdg-desktop-portal-termfilechooser}/libexec/xdg-desktop-portal-termfilechooser --loglevel=TRACE"
+      ];
+    };
   };
-  # TODO: mime = {};
 }
diff --git a/modules/by-name/xd/xdg/lf-wrapper.sh b/modules/by-name/xd/xdg/scripts/lf-wrapper.sh
index f85f7bac..f85f7bac 100755
--- a/modules/by-name/xd/xdg/lf-wrapper.sh
+++ b/modules/by-name/xd/xdg/scripts/lf-wrapper.sh
diff --git a/modules/by-name/xd/xdg/scripts/url-handler.sh b/modules/by-name/xd/xdg/scripts/url-handler.sh
new file mode 100755
index 00000000..5aa01a48
--- /dev/null
+++ b/modules/by-name/xd/xdg/scripts/url-handler.sh
@@ -0,0 +1,18 @@
+#!/usr/bin/env sh
+
+project="$({
+    tskm projects list
+    echo nvim zathura
+} | rofi -sep "$(printf "\n")" -dmenu)"
+
+if [ "$project" = "nvim" ]; then
+    "$TERMINAL" -e nvim "$1"
+elif [ "$project" = "zathura" ]; then
+    zathura "$1"
+elif [ "$project" ]; then
+    tskm open "$project" "$1"
+else
+    notify-send "(URL HANDLER) No project selected"; exit 1
+fi
+
+# vim: ft=sh