{
  lib,
  inputs,
  osConfig,
  ...
}: let
  styleCfg = osConfig.local.style;
in {
  imports = [
    inputs.walker.homeManagerModules.default
  ];
  config = lib.mkIf osConfig.local.modules.hyprland.enable {
    programs.walker = {
      enable = true;
      runAsService = true;
      # All options from the config.json can be used here.
      config = {
        list = {
          height = 200;
        };
        app_launch_prefix = "uwsm app -- ";
        websearch.prefix = "?";
        switcher.prefix = "/";
      };

      theme = with styleCfg.scheme.palette;
        lib.mkIf styleCfg.enable {
          style = ''
            @define-color foreground ${base05};
            @define-color background ${base00};
            @define-color accent ${base0E};

            #window,
            #box,
            #aiScroll,
            #aiList,
            #search,
            #password,
            #input,
            #prompt,
            #clear,
            #typeahead,
            #list,
            child,
            scrollbar,
            slider,
            #item,
            #text,
            #label,
            #bar,
            #sub,
            #activationlabel {
              all: unset;
            }

            #cfgerr {
              background: rgba(255, 0, 0, 0.4);
              margin-top: 20px;
              padding: 8px;
              font-size: 1.2em;
            }

            #window {
              color: @foreground;
            }

            #box {
              border-radius: 2px;
              background: @background;
              padding: 32px;
              border: 1px solid ${base01};
              box-shadow:
                0 19px 38px rgba(0, 0, 0, 0.3),
                0 15px 12px rgba(0, 0, 0, 0.22);
            }

            #search {
              box-shadow:
                0 1px 3px rgba(0, 0, 0, 0.1),
                0 1px 2px rgba(0, 0, 0, 0.22);
              background: ${base01};
              padding: 8px;
            }

            #prompt {
              margin-left: 4px;
              margin-right: 12px;
              color: @foreground;
              opacity: 0.2;
            }

            #clear {
              color: @foreground;
              opacity: 0.8;
            }

            #password,
            #input,
            #typeahead {
              border-radius: 2px;
            }

            #input {
              background: none;
            }

            #spinner {
              padding: 8px;
            }

            #typeahead {
              color: @foreground;
              opacity: 0.8;
            }

            #input placeholder {
              opacity: 0.5;
            }

            child {
              padding: 8px;
              border-radius: 2px;
            }

            child:selected,
            child:hover {
              background: alpha(@accent, 0.4);
            }

            #icon {
              margin-right: 8px;
            }

            #label {
              font-weight: 500;
            }

            #sub {
              opacity: 0.5;
              font-size: 0.8em;
            }

            .aiItem {
              padding: 10px;
              border-radius: 2px;
              color: @foreground;
              background: @background;
            }

            .aiItem.assistant {
              background: ${base02};
            }

            .aiItem:hover {
              background: alpha(@accent, 0.2);
              color: ${base00};
            }

            #activationlabel {
              color: @accent;
              font-weight: bold;
            }
          '';

          layout = {
            ui.window.box = {
              v_align = "center";
              orientation = "vertical";
            };
          };
        };
    };

    systemd.user.services.walker = {
      Unit = {
        PartOf = lib.mkForce [];
        After = lib.mkForce ["graphical-session.target"];
      };
      Service = {
        Slice = lib.mkForce "background-graphical.slice";
      };
    };
  };
}