{
  config,
  lib,
  pkgs,
  ...
}:

let
  rofimoji_sway_config = pkgs.writeTextFile {
    name = "rofimoji.conf";
    text = ''
      # Emoji selector
      bindsym $mod+backslash exec ${pkgs.rofimoji}/bin/rofimoji --selector tofi
    '';
  };
in
{
  imports = [ ];

  config = lib.mkIf (config.me.graphical && config.me.sway.enable) {
    me.swayIncludes = [
      rofimoji_sway_config
    ];

    environment.persistence."/state" = lib.mkIf (!config.me.buildingIso) {
      hideMounts = true;
      users.talexander = {
        directories = [
          {
            directory = ".local/share/rofimoji";
            user = "talexander";
            group = "talexander";
            mode = "0755";
          }
        ];
      };
    };

    nixpkgs.overlays = [
      (final: prev: {
        rofimoji = prev.rofimoji.overrideAttrs (old: {
          propagatedBuildInputs = old.propagatedBuildInputs ++ [ pkgs.tofi ];
          src = builtins.fetchGit {
            # https://github.com/fdw/rofimoji/issues/209
            url = "https://github.com/fdw/rofimoji.git";
            rev = "615f00abeb984f3e648ef712164aa4e61f2e1808";
          };
        });
      })
      (final: prev: {
        tofi = pkgs.symlinkJoin {
          name = "tofi";
          paths = [ prev.tofi ];
          buildInputs = [ pkgs.makeWrapper ];
          postBuild = ''
            wrapProgram $out/bin/tofi-drun --add-flags --font=${pkgs.source-sans-pro}/share/fonts/opentype/SourceSansPro-Regular.otf --add-flags --config=${./files/tofi-config}
            wrapProgram $out/bin/tofi --add-flags --config=${./files/tofi-config}
          '';
        };
      })
    ];
  };
}