summary refs log tree commit diff stats
path: root/user/settings/fish.nix
diff options
context:
space:
mode:
Diffstat (limited to 'user/settings/fish.nix')
-rw-r--r--user/settings/fish.nix73
1 files changed, 42 insertions, 31 deletions
diff --git a/user/settings/fish.nix b/user/settings/fish.nix
index 8ed80e3e..a487418c 100644
--- a/user/settings/fish.nix
+++ b/user/settings/fish.nix
@@ -4,38 +4,32 @@
 }: {
   programs.fish = {
     enable = true;
-    plugins = [
-      {
-        name = "tide";
-        src = pkgs.fetchFromGitHub {
-          # https://github.com/IlanCosman/tide
-          owner = "IlanCosman";
-          repo = "tide";
-          rev = "a3426e157f94b8a9cb5bcf96946b1e55625a1948";
-          sha256 = "1fwqmsrd6bpf67rgj6f362abjmpk6q8yynyskc4niwg3g15diqq5";
-        };
-      }
-      {
-        name = "fzf";
-        src = pkgs.fetchFromGitHub {
-          owner = "PatrickF1";
-          repo = "fzf.fish";
-          rev = "6d00ecc6e5b2b1313cfcb25515941ecfd5342b30";
-          sha256 = "1sd5f6707hys6dibs1zb6f1imlkspqad5i24j4gf7lk9cby0zh6i";
-        };
-      }
-      {
-        name = "ghq";
-        src = pkgs.fetchFromGitHub {
-          owner = "decors";
-          repo = "fish-ghq";
-          rev = "cafaaabe63c124bf0714f89ec715cfe9ece87fa2";
-          sha256 = "0cv7jpvdfdha4hrnjr887jv1pc6vcrxv2ahy7z6x562y7fd77gg9";
-        };
-      }
-    ];
+    plugins =
+      let
+        fromNixpkgs = pkg: { name = pkg.name; src = pkg.src; };
+      in
+      with pkgs.fishPlugins; [
+        (fromNixpkgs tide)
+        (fromNixpkgs fzf-fish)
+        (fromNixpkgs autopair)
+        {
+          name = "ghq";
+          src = pkgs.fetchFromGitHub {
+            owner = "decors";
+            repo = "fish-ghq";
+            sha256 = "0cv7jpvdfdha4hrnjr887jv1pc6vcrxv2ahy7z6x562y7fd77gg9";
+            # date = "2021-07-16T13:17:09+09:00";
+            rev = "cafaaabe63c124bf0714f89ec715cfe9ece87fa2";
+          };
+        }
+      ];
+    # TODO: pre-generate nix-your-shell
     interactiveShellInit = ''
+      ${pkgs.nix-your-shell}/bin/nix-your-shell --nom fish env | source
       bind \es __ghq_repository_search
+      # don't bind ctrl-t, it does nice things on macOS/BSD
+      set FZF_CTRL_T_COMMAND
+      set --export FZF_DEFAULT_OPTS '--cycle --layout=reverse --border --height=90% --preview-window=wrap --marker="*"'
       fzf_configure_bindings --directory=\cx\cf
     '';
     shellAliases = {
@@ -51,7 +45,24 @@
     functions = {
       ds = "du -hd1 $argv[1] | sort -h";
       last_history_item = "echo $history[1]";
-    };
+    } // (lib.attrsets.optionalAttrs pkgs.stdenv.isLinux {
+      open = ''
+        argparse h/help a/application -- $argv
+        or return
+
+        if set -ql _flag_help
+           echo "open [-h|--help] [-a application] [arguments...]"
+           return 1
+        end
+
+        if set -ql _flag_application
+           # TODO: support reverse-domain- named files (e.g. org.kde.kate.desktop)
+           ${pkgs.gtk3}/bin/gtk-launch $argv[1]
+        else
+          xdg-open $argv
+        end
+      '';
+    });
   };
   xdg.configFile."fish/completions" = {
     recursive = true;