one flake containing all of my nixos configs
{
  config,
  lib,
  pkgs,
  dotfiles_lib,
  ...
}: let
  cfg = config.dotfiles.shell.ranger;
in {
  options.dotfiles.shell.ranger = with dotfiles_lib.options; {
    enable = mkDefaultEnabledOption "enables ranger, the tui file manager.";
  };
  config = lib.mkIf cfg.enable {
    home.packages = [pkgs.ranger];
    xdg.configFile = lib.mkIf cfg.enable {
      "ranger/rc.conf".text = ''
        map l display_file
        map <A-n> scroll_preview 1
        map <A-e> scroll_preview -1

        copymap <UP> e
        copymap <DOWN> n
        copymap <LEFT> m
        copymap <RIGHT> i

        map N move down=0.5  pages=True
        map E move up=0.5    pages=True
        copymap N <C-D>
        copymap E <C-U>

        map M history_go -1
        map I history_go 1
        map ] move_parent 1

        map L eval fm.open_console('rename ' + fm.thisfile.relative_path.replace("%", "%%"), position=7)
        map <C-n> search_next
        map <C-N> search_next forward=False

        tmap N eval -q fm.ui.taskview.task_move(-1)
        tmap E eval -q fm.ui.taskview.task_move(0)
      '';
    };
  };
}