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 ]; +}