326 lines
9.8 KiB
Nix
326 lines
9.8 KiB
Nix
{
|
|
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.layan-kde
|
|
pkgs.kdePackages.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 = "layan";
|
|
|
|
# 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 = "com.github.vinceliuice.Layan";
|
|
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";
|
|
};
|
|
};
|
|
};
|
|
};
|
|
}
|