From 25a654cec427186fa8685c73e8ecd204a5bca018 Mon Sep 17 00:00:00 2001 From: Nathan McCarty Date: Sun, 18 Sep 2022 20:25:20 -0400 Subject: [PATCH] Add swayimg --- home-manager/common/programs/core.nix | 2 - home-manager/linux/default.nix | 7 +++ home-manager/linux/programs/sway.nix | 27 +++++++++- packages/swayimg/default.nix | 75 +++++++++++++++++++++++++++ 4 files changed, 108 insertions(+), 3 deletions(-) create mode 100644 packages/swayimg/default.nix diff --git a/home-manager/common/programs/core.nix b/home-manager/common/programs/core.nix index b0364d6..f1bb20f 100644 --- a/home-manager/common/programs/core.nix +++ b/home-manager/common/programs/core.nix @@ -35,8 +35,6 @@ with lib; }) (mkIf config.nathan.programs.util.productivity { home.packages = with pkgs; [ - # Feh image viewer - feh tokei # Spell check hunspell diff --git a/home-manager/linux/default.nix b/home-manager/linux/default.nix index 7e6680d..5326287 100644 --- a/home-manager/linux/default.nix +++ b/home-manager/linux/default.nix @@ -73,5 +73,12 @@ with lib; with nLib; { package = pkgs.firefox-beta-bin; }; nathan.programs.emacs.package = lib.mkDefault inputs.emacs.packages."${pkgs.system}".emacsPgtkNativeComp; + # We should be managing xdg stuff + xdg = { + enable = true; + # Manage mime associations + mime.enable = true; + mimeApps.enable = true; + }; }; } diff --git a/home-manager/linux/programs/sway.nix b/home-manager/linux/programs/sway.nix index eee2b6c..24876d6 100644 --- a/home-manager/linux/programs/sway.nix +++ b/home-manager/linux/programs/sway.nix @@ -7,6 +7,7 @@ with lib; config = mkIf nathan.programs.swaywm.enable ( let swaylock-command = "${pkgs.swaylock-effects}/bin/swaylock --screenshots --grace 30 --indicator --clock --timestr \"%-I:%M:%S %p\" --datestr \"%A %Y-%M-%d\" --effect-blur 20x3"; + swayimg = pkgs.callPackage ../../../packages/swayimg/default.nix { }; in { home.packages = with pkgs; [ @@ -36,6 +37,8 @@ with lib; sway-contrib.grimshot # fuzzel for launcher fuzzel + # for image viewing + swayimg ]; ######################### ## Sway @@ -63,17 +66,25 @@ with lib; border = 2; # Application specific configuration commands = [ + # Make pinentry float { command = "floating enable"; criteria = { app_id = "pinentry-qt"; }; } + # Make swayimg float, this is required to make it work + { + command = "floating enable"; + criteria = { + app_id = "^swayimg.*"; + }; + } # Work around for chrome ui bug { command = "shortcuts_inhibitor disable"; criteria = { - app_id = "^chrome-.*__-.*$"; + app_id = "^chrome-.*_-.*$"; }; } ]; @@ -595,6 +606,20 @@ with lib; After = [ "waybar.service" ]; }; }; + ######################### + ## Default applications + ######################### + xdg.mimeApps.defaultApplications = { + # Make all supported images open in swayimg + "image/jpeg" = [ "swayimg.desktop" ]; + "image/png" = [ "swayimg.desktop" ]; + "image/gif" = [ "swayimg.desktop" ]; + "image/svg+xml" = [ "swayimg.desktop" ]; + "image/webp" = [ "swayimg.desktop" ]; + "image/avif" = [ "swayimg.desktop" ]; + "image/tiff" = [ "swayimg.desktop" ]; + "image/bmp" = [ "swayimg.desktop" ]; + }; } ); } diff --git a/packages/swayimg/default.nix b/packages/swayimg/default.nix new file mode 100644 index 0000000..91cc5df --- /dev/null +++ b/packages/swayimg/default.nix @@ -0,0 +1,75 @@ +{ config +, lib +, pkgs +, stdenv +, fetchurl +, meson +, ninja +, pkg-config +, git +, cmake +, makeDesktopItem +, wayland +, wayland-protocols +, json_c +, libxkbcommon +, fontconfig +, giflib +, libjpeg +, libjxl +, libpng +, librsvg +, libwebp +, libheif +, libtiff +, libexif +, bash-completion +, ... +}: + +stdenv.mkDerivation rec { + pname = "swayimg"; + version = "1.9"; + + src = fetchurl { + url = "https://github.com/artemsen/swayimg/archive/refs/tags/v${version}.tar.gz"; + sha256 = "sha256-aTojp3VevtsUQnGytnSYChxRogNtq8/5aXw+PGJY8Qg="; + name = "${pname}-${version}.tar.gz"; + }; + + nativeBuildInputs = [ meson ninja pkg-config git cmake ]; + buildInputs = [ + wayland + wayland-protocols + json_c + libxkbcommon + fontconfig + giflib + libjpeg + libjxl + libpng + librsvg + libwebp + libheif + libtiff + libexif + bash-completion + ]; + + desktopItem = makeDesktopItem { + name = "swayimg-open"; + desktopName = "swayimg"; + exec = "swayimg %u"; + terminal = false; + mimeTypes = [ + "image/jpeg" + "image/png" + "image/gif" + "image/svg+xml" + "image/webp" + "image/avif" + "image/tiff" + "image/bmp" + ]; + }; +}