feh: add themes option (#6074)

- added themes option
- added themes test
- updated broken man page links
This commit is contained in:
gmvar 2024-11-14 09:16:21 -08:00 committed by GitHub
parent 35b055009a
commit 1d0862ee2d
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 78 additions and 2 deletions

View file

@ -8,6 +8,12 @@ let
bindingsOf = t: with types; attrsOf (nullOr (either t (listOf t)));
renderThemes = options:
let
render =
mapAttrsToList (theme: options: "${theme} ${escapeShellArgs options}");
in concatStringsSep "\n" (render options);
renderBindings = bindings:
let
enabled = filterAttrs (n: v: v != null) bindings;
@ -41,7 +47,7 @@ in {
Override feh's default mouse button mapping. If you want to disable an
action, set its value to null. If you want to bind multiple buttons to
an action, set its value to a list.
See <https://man.finalrewind.org/1/feh/#x425554544f4e53> for
See <https://man.finalrewind.org/1/feh/#BUTTONS_CONFIG_SYNTAX> for
default bindings and available commands.
'';
};
@ -58,10 +64,37 @@ in {
Override feh's default keybindings. If you want to disable a keybinding
set its value to null. If you want to bind multiple keys to an action,
set its value to a list.
See <https://man.finalrewind.org/1/feh/#x4b455953> for
See <https://man.finalrewind.org/1/feh/#KEYS_CONFIG_SYNTAX> for
default bindings and available commands.
'';
};
themes = mkOption {
default = { };
type = with types; attrsOf (listOf str);
example = {
feh = [ "--image-bg" "black" ];
webcam = [ "--multiwindow" "--reload" "20" ];
present = [ "--full-screen" "--sort" "name" "--hide-pointer" ];
booth = [ "--full-screen" "--hide-pointer" "--slideshow-delay" "20" ];
imagemap = [
"-rVq"
"--thumb-width"
"40"
"--thumb-height"
"30"
"--index-info"
"%n\\n%wx%h"
];
example = [ "--info" "foo bar" ];
};
description = ''
Define themes for feh.
See <https://man.finalrewind.org/1/feh/#THEMES_CONFIG_SYNTAX> for
important guidelines and limitations related to theme configuration.
'';
};
};
config = mkIf cfg.enable {
@ -79,5 +112,8 @@ in {
xdg.configFile."feh/keys" = mkIf (cfg.keybindings != { }) {
text = renderBindings cfg.keybindings + "\n";
};
xdg.configFile."feh/themes" =
mkIf (cfg.themes != { }) { text = renderThemes cfg.themes + "\n"; };
};
}

View file

@ -1,4 +1,5 @@
{
feh-empty-config = ./feh-empty-settings.nix;
feh-bindings = ./feh-bindings.nix;
feh-themes = ./feh-themes.nix;
}

View file

@ -9,6 +9,7 @@
nmt.script = ''
assertPathNotExists home-files/.config/feh/buttons
assertPathNotExists home-files/.config/feh/keys
assertPathNotExists home-files/.config/feh/themes
'';
};
}

View file

@ -0,0 +1,6 @@
booth --full-screen --hide-pointer --slideshow-delay 20
example --info 'foo bar'
feh --image-bg black
imagemap -rVq --thumb-width 40 --thumb-height 30 --index-info '%n\n%wx%h'
present --full-screen --sort name --hide-pointer
webcam --multiwindow --reload 20

View file

@ -0,0 +1,32 @@
{ pkgs, ... }:
{
config = {
programs.feh.enable = true;
programs.feh.themes = {
feh = [ "--image-bg" "black" ];
webcam = [ "--multiwindow" "--reload" "20" ];
present = [ "--full-screen" "--sort" "name" "--hide-pointer" ];
booth = [ "--full-screen" "--hide-pointer" "--slideshow-delay" "20" ];
imagemap = [
"-rVq"
"--thumb-width"
"40"
"--thumb-height"
"30"
"--index-info"
"%n\\n%wx%h"
];
example = [ "--info" "foo bar" ];
};
test.stubs.feh = { };
nmt.script = ''
assertFileContent \
home-files/.config/feh/themes \
${./feh-themes-expected}
'';
};
}