{ config, lib, pkgs, ... }: let cfg = config.hive.plasma; in { options.hive.plasma.enable = lib.mkEnableOption "Plasma configuration"; config = lib.mkIf cfg.enable { # load hm-vars in x-session xsession.enable = true; # symlink wallpapers home.file.".local/share/wallpaper" = { source = ../../static/wallpaper; recursive = true; }; # Use kvantum-theme home.sessionVariables = { QT_STYLE_OVERRIDE = "kvantum"; }; # provide kvantum and nord theme home.packages = [ # pkgs.utterly-nord-plasma pkgs.libsForQt5.qtstyleplugin-kvantum ]; programs.konsole = { enable = true; defaultProfile = "default"; profiles = { default = { name = "default"; # colorScheme = "Utterly-Nord-Konsole"; font = { name = "Fira Code"; size = 10; }; }; }; }; # use kvantum theme qt.enable = true; qt.style.name = "kvantum"; # add nord like gtk theme gtk = { enable = true; cursorTheme = { package = pkgs.nordzy-cursor-theme; name = "Nordzy-cursors"; }; theme = { package = pkgs.nordic; name = "Nordic"; }; iconTheme = { package = pkgs.tela-circle-icon-theme; name = "Tela-circle-nord"; }; }; programs.plasma = { enable = true; overrideConfig = true; # # Some high-level settings: # workspace = { clickItemTo = "select"; # lookAndFeel = "Utterly-Nord"; theme = "breeze"; # colorScheme = "UtterlyNord"; cursor = { theme = "Breeze"; size = 24; }; wallpaper = "/home/jonas/.local/share/wallpaper/nord.png"; }; hotkeys.commands."launch-konsole" = { name = "Launch Konsole"; key = "Meta+Return"; command = "konsole"; }; panels = [ # Windows-like panel at the bottom { location = "bottom"; widgets = [ # We can configure the widgets by adding the name and config # attributes. For example to add the the kickoff widget and set the # icon to "nix-snowflake-white" use the below configuration. This will # add the "icon" key to the "General" group for the widget in # ~/.config/plasma-org.kde.plasma.desktop-appletsrc. { name = "org.kde.plasma.kickoff"; config = { General = { icon = "nix-snowflake-white"; alphaSort = true; }; }; } # Or you can configure the widgets by adding the widget-specific options for it. # See modules/widgets for supported widgets and options for these widgets. # For example: { kickoff = { sortAlphabetically = true; icon = "nix-snowflake-white"; }; } # Adding configuration to the widgets can also for example be used to # pin apps to the task-manager, which this example illustrates by # pinning dolphin and konsole to the task-manager by default with widget-specific options. { iconTasks = { launchers = [ "applications:org.kde.dolphin.desktop" "applications:org.kde.konsole.desktop" ]; }; } # Or you can do it manually, for example: { name = "org.kde.plasma.icontasks"; config = { General = { launchers = [ "applications:org.kde.dolphin.desktop" "applications:org.kde.konsole.desktop" ]; }; }; } # If no configuration is needed, specifying only the name of the # widget will add them with the default configuration. "org.kde.plasma.marginsseparator" # If you need configuration for your widget, instead of specifying the # the keys and values directly using the config attribute as shown # above, plasma-manager also provides some higher-level interfaces for # configuring the widgets. See modules/widgets for supported widgets # and options for these widgets. The widgets below shows two examples # of usage, one where we add a digital clock, setting 12h time and # first day of the week to Sunday and another adding a systray with # some modifications in which entries to show. { digitalClock = { calendar.firstDayOfWeek = "sunday"; time.format = "12h"; }; } { systemTray.items = { # We explicitly show bluetooth and battery shown = [ "org.kde.plasma.battery" "org.kde.plasma.bluetooth" ]; # And explicitly hide networkmanagement and volume hidden = [ "org.kde.plasma.networkmanagement" "org.kde.plasma.volume" ]; }; } ]; hiding = "autohide"; } # Application name, Global menu and Song information and playback controls at the top { location = "top"; height = 26; widgets = [ { applicationTitleBar = { behavior = { activeTaskSource = "activeTask"; }; layout = { elements = ["windowTitle"]; horizontalAlignment = "left"; showDisabledElements = "deactivated"; verticalAlignment = "center"; }; overrideForMaximized.enable = false; titleReplacements = [ { type = "regexp"; originalTitle = "^Brave Web Browser$"; newTitle = "Brave"; } { type = "regexp"; originalTitle = ''\\bDolphin\\b''; newTitle = "File manager"; } ]; windowTitle = { font = { bold = false; fit = "fixedSize"; size = 12; }; hideEmptyTitle = true; margins = { bottom = 0; left = 10; right = 5; top = 0; }; source = "appName"; }; }; } "org.kde.plasma.appmenu" "org.kde.plasma.panelspacer" { plasmusicToolbar = { panelIcon = { albumCover = { useAsIcon = false; radius = 8; }; icon = "view-media-track"; }; playbackSource = "auto"; musicControls.showPlaybackControls = true; songText = { displayInSeparateLines = true; maximumWidth = 640; scrolling = { behavior = "alwaysScroll"; speed = 3; }; }; }; } ]; } ]; kwin = { edgeBarrier = 0; # Disables the edge-barriers introduced in plasma 6.1 cornerBarrier = false; scripts.polonium.enable = true; }; kscreenlocker = { lockOnResume = true; timeout = 10; }; # # Some mid-level settings: # shortcuts = { ksmserver = { "Lock Session" = ["Screensaver" "Meta+Ctrl+Alt+L"]; }; kwin = { "Expose" = "Meta+,"; "Switch Window Down" = "Meta+J"; "Switch Window Left" = "Meta+H"; "Switch Window Right" = "Meta+L"; "Switch Window Up" = "Meta+K"; "Window Quick Tile Bottom" = "Meta+Shift+J"; "Window Quick Tile Left" = "Meta+Shift+H"; "Window Quick Tile Right" = "Meta+Shift+L"; "Window Quick Tile Top" = "Meta+Shift+K"; "Kill Window" = "Meta+Alt+Q"; "Window Close" = "Meta+Shift+Q"; } // ( with lib; let desktops = map toString (lists.range 1 8); in listToAttrs (map (i: { name = "Switch to Desktop ${i}"; value = "Meta+${i}"; }) desktops) // listToAttrs (map (i: { name = "Window to Desktop ${i}"; value = "Meta+Shift+${i}"; }) desktops) ); }; # # Some low-level settings: # configFile = { baloofilerc."Basic Settings"."Indexing-Enabled" = false; kwinrc."org.kde.kdecoration2".ButtonsOnLeft = "SF"; kwinrc.Desktops.Number = { value = 8; # Forces kde to not change this value (even through the settings app). immutable = true; }; kscreenlockerrc = { Greeter.WallpaperPlugin = "org.kde.potd"; # To use nested groups use / as a separator. In the below example, # Provider will be added to [Greeter][Wallpaper][org.kde.potd][General]. "Greeter/Wallpaper/org.kde.potd/General".Provider = "bing"; }; }; }; }; }