diff --git a/modules/skim/check.nix b/modules/skim/check.nix new file mode 100644 index 0000000..d1302aa --- /dev/null +++ b/modules/skim/check.nix @@ -0,0 +1,12 @@ +{ pkgs, self }: +let + skimWrapped = + (self.wrapperModules.skim.apply { + inherit pkgs; + settings.version = true; + }).wrapper; +in +pkgs.runCommand "sk-check" { nativeBuildInputs = [ skimWrapped ]; } '' + sk | grep ${skimWrapped.version} + touch $out +'' diff --git a/modules/skim/module.nix b/modules/skim/module.nix new file mode 100644 index 0000000..cba30ac --- /dev/null +++ b/modules/skim/module.nix @@ -0,0 +1,63 @@ +{ config, lib, ... }: +{ + _class = "wrapper"; + + options = { + settings = lib.mkOption { + type = + with lib.types; + let + atom = oneOf [ + str + int + bool + ]; + in + attrsOf (either (attrsOf atom) atom); + default = { }; + description = "Default options passed to skim. See {manpage}`sk(1)`"; + example = { + tabstop = 4; + no-info = true; + bind = { + ctrl-d = "half-page-down"; + ctrl-u = "half-page-up"; + }; + }; + }; + }; + + config = { + package = lib.mkDefault config.pkgs.skim; + + env.SKIM_OPTIONS_FILE = + let + mkValueStringDefault = lib.generators.mkValueStringDefault { }; + + generated = lib.generators.toKeyValue { + mkKeyValue = + k: v: + if v == true then + "--${k}" + else + let + value = + if builtins.isAttrs v then + lib.escapeShellArg (lib.concatMapAttrsStringSep "," (k': v': "${k'}:${mkValueStringDefault v'}") v) + else if builtins.isString v then + lib.escapeShellArg v + else + mkValueStringDefault v; + in + "--${k} ${value}"; + } config.settings; + in + lib.pipe generated [ + (lib.replaceString "#" "##") # escape comments + (config.pkgs.writeText "skim-options") + builtins.toPath + ]; + + meta.maintainers = [ lib.maintainers.bandithedoge ]; + }; +}