diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS
index 7a2660945..43ed4e4c1 100644
--- a/.github/CODEOWNERS
+++ b/.github/CODEOWNERS
@@ -234,6 +234,8 @@
/modules/programs/senpai.nix @malte-v
+/modules/programs/sioyek.nix @podocarp
+
/modules/programs/sm64ex.nix @ivarwithoutbones
/tests/modules/programs/sm64ex @ivarwithoutbones
diff --git a/modules/lib/maintainers.nix b/modules/lib/maintainers.nix
index 4b1f87d2a..07acce2d5 100644
--- a/modules/lib/maintainers.nix
+++ b/modules/lib/maintainers.nix
@@ -235,6 +235,12 @@
github = "pinage404";
githubId = 6325757;
};
+ podocarp = {
+ name = "Jia Xiaodong";
+ email = "xdjiaxd@gmail.com";
+ github = "podocarp";
+ githubId = 10473184;
+ };
mainrs = {
name = "mainrs";
email = "5113257+mainrs@users.noreply.github.com";
diff --git a/modules/modules.nix b/modules/modules.nix
index cb2e30b5b..462575f47 100644
--- a/modules/modules.nix
+++ b/modules/modules.nix
@@ -142,6 +142,7 @@ let
./programs/sbt.nix
./programs/scmpuff.nix
./programs/senpai.nix
+ ./programs/sioyek.nix
./programs/skim.nix
./programs/sm64ex.nix
./programs/sqls.nix
diff --git a/modules/programs/sioyek.nix b/modules/programs/sioyek.nix
new file mode 100644
index 000000000..9ef32746c
--- /dev/null
+++ b/modules/programs/sioyek.nix
@@ -0,0 +1,70 @@
+{ config, lib, pkgs, ... }:
+with lib;
+let
+ cfg = config.programs.sioyek;
+
+ renderAttrs = attrs:
+ concatStringsSep "\n"
+ (mapAttrsToList (name: value: "${name} ${value}") attrs);
+in {
+ options = {
+ programs.sioyek = {
+ enable = mkEnableOption
+ "Sioyek is a PDF viewer designed for reading research papers and technical books.";
+
+ package = mkOption {
+ default = pkgs.sioyek;
+ defaultText = literalExpression "pkgs.sioyek";
+ type = types.package;
+ description = "Package providing the sioyek binary";
+ };
+
+ bindings = mkOption {
+ description = ''
+ Input configuration written to
+ $XDG_CONFIG_HOME/sioyek/keys_user.config.
+ See .
+ '';
+ type = types.attrsOf types.str;
+ default = { };
+ example = literalExpression ''
+ {
+ "move_up" = "k";
+ "move_down" = "j";
+ "move_left" = "h";
+ "move_right" = "l";
+ }
+ '';
+ };
+
+ config = mkOption {
+ description = ''
+ Input configuration written to
+ $XDG_CONFIG_HOME/sioyek/prefs_user.config.
+ See .
+ '';
+ type = types.attrsOf types.str;
+ default = { };
+ example = literalExpression ''
+ {
+ "background_color" = "1.0 1.0 1.0";
+ "text_highlight_color" = "1.0 0.0 0.0";
+ }
+ '';
+ };
+
+ };
+ };
+
+ config = mkIf cfg.enable (mkMerge [
+ { home.packages = [ cfg.package ]; }
+ (mkIf (cfg.config != { }) {
+ xdg.configFile."sioyek/prefs_user.config".text = renderAttrs cfg.config;
+ })
+ (mkIf (cfg.bindings != { }) {
+ xdg.configFile."sioyek/keys_user.config".text = renderAttrs cfg.bindings;
+ })
+ ]);
+
+ meta.maintainers = [ hm.maintainers.podocarp ];
+}