{
  config,
  pkgs,
  inputs,
  osConfig,
  ...
}:
{
  stylix.targets.kde.enable = false;
  imports = [ inputs.plasma-manager.homeManagerModules.plasma-manager ];
  home.packages = with pkgs; [
    protonmail-bridge-gui
    libreoffice-qt-fresh
    rc2nix
    wl-clipboard
  ];
  services.gpg-agent.pinentryPackage = pkgs.pinentry-qt;
  programs.plasma = {
    enable = true;
    overrideConfig = true;

    workspace = {
      iconTheme = config.gtk.iconTheme.name;
      cursor = {
        inherit (config.home.pointerCursor) size;
        theme = config.home.pointerCursor.name;
      };
      wallpaper = config.stylix.image;
    };

    fonts =
      let
        general = {
          family = config.stylix.fonts.sansSerif.name;
          pointSize = 12;
        };
        small = {
          inherit (general) family;
          pointSize = general.pointSize - 2;
        };
        fixedWidth = {
          family = config.stylix.fonts.monospace.name;
          pointSize = 12;
        };
      in
      {
        inherit general small fixedWidth;
        menu = general;
        toolbar = general;
        windowTitle = small;
      };

    hotkeys.commands = {
      "launch-alacritty" = {
        name = "Launch Alacritty terminal emulator";
        key = "Ctrl+Alt+T";
        command = "alacritty";
      };
      "launch-emacs" = {
        name = "Launch Emacs Client Window";
        key = "Meta+Alt+X";
        command = "emacsclient -c";
      };
    };

    panels = [
      {
        height = 32;
        lengthMode = "fill";
        location = "bottom";
        alignment = "center";
        hiding = "normalpanel";
        floating = true;
        screen = "all";
        widgets = [
          {
            name = "org.kde.plasma.kicker";
            config.General = {
              icon = "nix-snowflake";
              appNameFormat = 0;
              limitDepth = true;
              alphaSort = true;
              recentOrdering = 0;
              showRecentApps = true;
              showRecentDocs = true;
              showIconsRootLevel = true;
            };
          }
          "org.kde.plasma.marginsseparator"
          {
            name = "org.kde.plasma.pager";
            config.General = {
              showWindowIcons = "true";
              showOnlyCurrentScreen = "false";
              wrapPage = "true";
            };
          }
          "org.kde.plasma.panelspacer"
          {
            name = "org.kde.plasma.icontasks";
            config.General = {
              maxStripes = "1";
              showToolTips = "true";
              launchers = [
                "preferred://filemanager"
                "preferred://browser"
                "applications:emacs.desktop"
                "applications:Alacritty.desktop"
                "applications:writer.desktop"
                "applications:calc.desktop"
                "applications:impress.desktop"
                "applications:org.kde.okular.desktop"
                "applications:org.kde.elisa.desktop"
                "applications:org.kde.plasma-systemmonitor.desktop"
                "applications:systemsettings.desktop"
              ];
            };
          }
          "org.kde.plasma.panelspacer"
          "org.kde.plasma.marginsseparator"
          "org.kde.plasma.keyboardindicator"
          "org.kde.plasma.cameraindicator"
          {
            systemTray = {
              icons = {
                spacing = "small";
                scaleToFit = false;
              };
            };
          }
          {
            digitalClock = {
              date = {
                enable = true;
                format = "isoDate";
                position = "besideTime";
              };
              time = {
                format = "24h";
                showSeconds = "onlyInTooltip";
              };
              calendar.showWeekNumbers = true;
            };
          }
          {
            name = "org.kde.plasma.userswitcher";
            config.General = {
              showFace = "true";
              showName = "false";
              showFullName = "true";
              showTechnicalInfo = "true";
            };
          }
        ];
      }
    ];

    shortcuts = {
      ksmserver = {
        "Lock Session" = [
          "Screensaver"
          "Meta+Alt+L"
        ];
      };
      kwin = {
        "Walk Through Windows of Current Application" = "Alt+`";
        "Walk Through Windows of Current Application (Reverse)" = "Alt+¬";
        "ToggleMouseClick" = "Meta+*";
        "Expose" = "Meta+,";
        "Switch Window Down" = "Meta+J";
        "Switch Window Left" = "Meta+H";
        "Switch Window Right" = "Meta+L";
        "Switch Window Up" = "Meta+K";
        "Invert" = "Meta+Ctrl+I";
        "InvertWindow" = "Meta+Ctrl+U";
        "Invert Screen Colors" = [ ];
      };
      "services/org.kde.konsole.desktop"."_launch" = [ ];
      "services/org.kde.krunner.desktop"."_launch" = [
        "Meta+Space"
        "Search"
        "Alt+F2"
      ];
    };

    kwin = {
      virtualDesktops = {
        rows = 1;
        number = 4;
      };
      effects = {
        translucency.enable = true;
        blur.enable = true;
        cube.enable = true;
        dimAdminMode.enable = true;
      };
    };

    powerdevil =
      let
        powerButtonAction = "turnOffScreen";
        whenSleepingEnter = "standbyThenHibernate";
        whenLaptopLidClosed = "sleep";
      in
      {
        AC = {
          inherit powerButtonAction whenSleepingEnter whenLaptopLidClosed;
          autoSuspend = {
            action = "sleep";
            idleTimeout = 7200;
          };
          dimDisplay = {
            enable = true;
            # idleTimeOut = 300;
          };
          turnOffDisplay = {
            idleTimeout = 1800;
            idleTimeoutWhenLocked = 120;
          };
        };
        battery = {
          inherit powerButtonAction whenSleepingEnter whenLaptopLidClosed;
          autoSuspend = {
            action = "sleep";
            idleTimeout = 900;
          };
          dimDisplay = {
            enable = true;
            # idleTimeOut = 120;
          };
          turnOffDisplay = {
            idleTimeout = 300;
            idleTimeoutWhenLocked = 60;
          };
        };
        lowBattery = {
          inherit powerButtonAction whenSleepingEnter whenLaptopLidClosed;
          autoSuspend = {
            action = "hibernate";
            idleTimeout = 300;
          };
          dimDisplay = {
            enable = true;
            # idleTimeOut = 60;
          };
          turnOffDisplay = {
            idleTimeout = 120;
            idleTimeoutWhenLocked = "immediately";
          };
        };
      };

    configFile = {
      baloofilerc."Basic Settings"."Indexing-Enabled" = false;
      kwalletrc."org.freedesktop.secrets".apiEnabled = true;
      kcminputrc.Keyboard.NumLock = 1;
      plasmanotifyrc = {
        Notifications = {
          NormalAlwaysOnTop = true;
        };
      };
      krunnerrc = {
        General = {
          ActivateWhenTypingOnDesktop = false;
          FreeFloating = true;
        };
      };
      kscreenlockerrc = {
        Daemon.Timeout = 15;
        Greeter.WallpaperPlugin = "org.kde.potd";
      };
      klipperrc = {
        General = {
          SyncClipboards = true;
          MaxClipItems = 5;
          IgnoreImages = false;
          KeepClipboardContents = false;
        };
      };
      kdeglobals = {
        General =
          let
            AccentColor =
              let
                r = config.lib.stylix.scheme."base0E-rgb-r";
                g = config.lib.stylix.scheme."base0E-rgb-g";
                b = config.lib.stylix.scheme."base0E-rgb-b";
              in
              "${r}, ${g}, ${b}";
          in
          {
            inherit AccentColor;
            LastUsedCustomAccentColor = AccentColor;
            TerminalApplication = "alacritty";
            TerminalService = "Alacritty.desktop";
          };
        WM = {
          # TODO convert to base16 colours at some point
          activeBackground = "227,229,231";
          activeBlend = "227,229,231";
          activeForeground = "35,38,41";
          inactiveBackground = "239,240,241";
          inactiveBlend = "239,240,241";
          inactiveForeground = "112,125,138";
        };
      };
      breezerc = {
        Common = {
          OutlineClassButton = true;
          OutlineCloseButtone = true;
          ShadowSize = "ShadowVeryLarge";
          ShadowStrength = "128";
        };
        Style = {
          MenuOpacity = "100";
        };
      };
      dolphinrc = {
        ContentDisplay = {
          UsePermissionsFormat = "CombinedFormat";
        };
        General = {
          BrowseThroughArchives = true;
          OpenNewTabAfterLastTab = true;
          RememberOpenedTabs = false;
        };
      };
      kwinrc = {
        Plugins = {
          frozenappEnabled = false;
          mouseclickEnabled = true;
          shakecursorEnabled = false;
          invertEnabled = true;
        };
        Windows = {
          FocusPolicy = "FocusFollowsMouse";
          RollOverDesktops = true;
        };
        NightColor = {
          Active = true;
          Mode = "Location";
          LatitudeFixed = "${osConfig.location.latitude}";
          LongitudeFixed = "${osConfig.location.longitude}";
        };
        "Effect-translucency" = {
          Inactive = 100;
          MoveResize = 100;
          Dialogs = 100;
          ComboboxPopups = 100;
          Menus = 100;
        };
        "org.kde.kdecoration2" = {
          BorderSize = "None";
          BorderSizeAuto = "false";
        };
      };
    };
  };
  xdg.configFile."autostart/proton-bridge-gui.desktop".source = "${pkgs.protonmail-bridge-gui}/share/applications/proton-bridge-gui.desktop";
}