Skip to content

Commit

Permalink
feh: add themes option (#6074)
Browse files Browse the repository at this point in the history
- added themes option
- added themes test
- updated broken man page links
  • Loading branch information
gmvar authored Nov 14, 2024
1 parent 35b0550 commit 1d0862e
Show file tree
Hide file tree
Showing 5 changed files with 78 additions and 2 deletions.
40 changes: 38 additions & 2 deletions modules/programs/feh.nix
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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.
'';
};
Expand All @@ -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 {
Expand All @@ -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"; };
};
}
1 change: 1 addition & 0 deletions tests/modules/programs/feh/default.nix
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
{
feh-empty-config = ./feh-empty-settings.nix;
feh-bindings = ./feh-bindings.nix;
feh-themes = ./feh-themes.nix;
}
1 change: 1 addition & 0 deletions tests/modules/programs/feh/feh-empty-settings.nix
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
nmt.script = ''
assertPathNotExists home-files/.config/feh/buttons
assertPathNotExists home-files/.config/feh/keys
assertPathNotExists home-files/.config/feh/themes
'';
};
}
6 changes: 6 additions & 0 deletions tests/modules/programs/feh/feh-themes-expected
Original file line number Diff line number Diff line change
@@ -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
32 changes: 32 additions & 0 deletions tests/modules/programs/feh/feh-themes.nix
Original file line number Diff line number Diff line change
@@ -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}
'';
};
}

0 comments on commit 1d0862e

Please sign in to comment.