diff --git a/modules/programs/feh.nix b/modules/programs/feh.nix index f44f184a..bef9caac 100644 --- a/modules/programs/feh.nix +++ b/modules/programs/feh.nix @@ -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 for + See 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 for + See 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 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"; }; }; } diff --git a/tests/modules/programs/feh/default.nix b/tests/modules/programs/feh/default.nix index 48bab8ab..e1051adc 100644 --- a/tests/modules/programs/feh/default.nix +++ b/tests/modules/programs/feh/default.nix @@ -1,4 +1,5 @@ { feh-empty-config = ./feh-empty-settings.nix; feh-bindings = ./feh-bindings.nix; + feh-themes = ./feh-themes.nix; } diff --git a/tests/modules/programs/feh/feh-empty-settings.nix b/tests/modules/programs/feh/feh-empty-settings.nix index 62feb823..9a50e20b 100644 --- a/tests/modules/programs/feh/feh-empty-settings.nix +++ b/tests/modules/programs/feh/feh-empty-settings.nix @@ -9,6 +9,7 @@ nmt.script = '' assertPathNotExists home-files/.config/feh/buttons assertPathNotExists home-files/.config/feh/keys + assertPathNotExists home-files/.config/feh/themes ''; }; } diff --git a/tests/modules/programs/feh/feh-themes-expected b/tests/modules/programs/feh/feh-themes-expected new file mode 100644 index 00000000..5dce2792 --- /dev/null +++ b/tests/modules/programs/feh/feh-themes-expected @@ -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 diff --git a/tests/modules/programs/feh/feh-themes.nix b/tests/modules/programs/feh/feh-themes.nix new file mode 100644 index 00000000..f06ea071 --- /dev/null +++ b/tests/modules/programs/feh/feh-themes.nix @@ -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} + ''; + }; +}