296 lines
7.2 KiB
Nix
296 lines
7.2 KiB
Nix
{
|
|
config,
|
|
lib,
|
|
pkgs,
|
|
plasma-manager,
|
|
...
|
|
}:
|
|
let
|
|
inherit (lib)
|
|
mkOption
|
|
types
|
|
mkIf
|
|
mkMerge
|
|
optionals
|
|
length
|
|
filter
|
|
;
|
|
cfg = config.ringofstorms.dePlasma;
|
|
oneGpuEnabled =
|
|
(length (
|
|
filter (x: x) [
|
|
cfg.gpu.nvidia.enable or false
|
|
cfg.gpu.amd.enable or false
|
|
cfg.gpu.intel.enable or false
|
|
]
|
|
)) <= 1;
|
|
in
|
|
{
|
|
options.ringofstorms.dePlasma = {
|
|
enable = mkOption {
|
|
type = types.bool;
|
|
default = true;
|
|
description = "Enable KDE Plasma DE.";
|
|
};
|
|
|
|
wayland = mkOption {
|
|
type = types.bool;
|
|
default = true;
|
|
description = "Enable SDDM Wayland and Plasma Wayland session.";
|
|
};
|
|
|
|
disableKeyd = lib.mkEnableOption "Disable keyd service for Plasma";
|
|
|
|
appearance.dark.enable = mkOption {
|
|
type = types.bool;
|
|
default = true;
|
|
description = "Enable Breeze Dark, GTK Breeze-Dark, and dark cursors.";
|
|
};
|
|
|
|
sddm.autologinUser = mkOption {
|
|
type = types.nullOr types.str;
|
|
default = null;
|
|
description = "Set an autologin user for SDDM (optional).";
|
|
};
|
|
|
|
gpu = {
|
|
enable32Bit = mkOption {
|
|
type = types.bool;
|
|
default = true;
|
|
description = "Install 32-bit OpenGL/VA-API bits (useful for Steam/Wine).";
|
|
};
|
|
nvidia = {
|
|
enable = mkOption {
|
|
type = types.bool;
|
|
default = false;
|
|
};
|
|
open = mkOption {
|
|
type = types.bool;
|
|
default = true;
|
|
};
|
|
package = mkOption {
|
|
type = types.package;
|
|
default = pkgs.linuxPackages.nvidiaPackages.production;
|
|
};
|
|
};
|
|
amd = {
|
|
enable = mkOption {
|
|
type = types.bool;
|
|
default = false;
|
|
};
|
|
useAmdvlk = mkOption {
|
|
type = types.bool;
|
|
default = false;
|
|
};
|
|
};
|
|
intel = {
|
|
enable = mkOption {
|
|
type = types.bool;
|
|
default = false;
|
|
};
|
|
legacyVaapi = mkOption {
|
|
type = types.bool;
|
|
default = false;
|
|
};
|
|
};
|
|
};
|
|
};
|
|
|
|
config = mkIf cfg.enable (mkMerge [
|
|
{
|
|
services.displayManager.sddm = {
|
|
enable = true;
|
|
wayland.enable = cfg.wayland;
|
|
theme = "breeze";
|
|
};
|
|
services.displayManager.autoLogin = mkIf (cfg.sddm.autologinUser != null) {
|
|
enable = true;
|
|
user = cfg.sddm.autologinUser;
|
|
};
|
|
services.desktopManager.plasma6.enable = true;
|
|
|
|
# Audio / IPC
|
|
services.pipewire = {
|
|
enable = true;
|
|
alsa.enable = true;
|
|
pulse.enable = true;
|
|
wireplumber.enable = true;
|
|
};
|
|
|
|
# TODO revisit
|
|
# services.power-profiles-daemon.enable = true;
|
|
|
|
# Wayland-friendly Electron/Chromium
|
|
environment.sessionVariables.NIXOS_OZONE_WL = "1";
|
|
|
|
# OpenGL base
|
|
hardware.graphics = {
|
|
enable = true;
|
|
enable32Bit = cfg.gpu.enable32Bit;
|
|
};
|
|
|
|
# KDEConnect
|
|
programs.kdeconnect.enable = true;
|
|
|
|
# Useful KDE packages
|
|
environment.systemPackages = with pkgs; [
|
|
# Core KDE tools
|
|
kdePackages.kde-gtk-config
|
|
kdePackages.konsole
|
|
kdePackages.dolphin
|
|
kdePackages.spectacle
|
|
kdePackages.plasma-browser-integration
|
|
# kdePackages.plasma-workspace-wallpapers
|
|
|
|
# Panel applets required for widgets
|
|
kdePackages.plasma-nm # org.kde.plasma.networkmanagement
|
|
kdePackages.bluedevil # org.kde.plasma.bluetooth
|
|
kdePackages.plasma-pa # org.kde.plasma.volume
|
|
kdePackages.kdeplasma-addons # extra widgets
|
|
kdePackages.powerdevil # power management services
|
|
|
|
# Wayland clipboard helpers
|
|
wl-clipboard
|
|
wl-clip-persist
|
|
];
|
|
|
|
console.useXkbConfig = true;
|
|
services.xserver.xkb = {
|
|
layout = "us";
|
|
};
|
|
|
|
users.groups.keyd = mkIf (!cfg.disableKeyd) { };
|
|
services.keyd = mkIf (!cfg.disableKeyd) {
|
|
enable = true;
|
|
keyboards.default.settings = {
|
|
main = {
|
|
capslock = "escape";
|
|
};
|
|
};
|
|
};
|
|
|
|
# Home Manager modules (plasma-manager + our HM layer)
|
|
home-manager.sharedModules = [
|
|
plasma-manager.homeModules.plasma-manager
|
|
./home_manager
|
|
];
|
|
}
|
|
|
|
# Make GTK apps dark too if enabled
|
|
(mkIf cfg.appearance.dark.enable {
|
|
environment.sessionVariables = {
|
|
GTK_THEME = "Breeze-Dark";
|
|
XCURSOR_THEME = "breeze_cursors";
|
|
};
|
|
})
|
|
|
|
(mkIf cfg.appearance.dark.enable {
|
|
environment.systemPackages = with pkgs; [
|
|
kdePackages.breeze
|
|
kdePackages.breeze-icons
|
|
kdePackages.breeze-gtk
|
|
];
|
|
environment.etc."xdg/kdeglobals".text = ''
|
|
[General]
|
|
ColorScheme=BreezeDark
|
|
|
|
[KDE]
|
|
LookAndFeelPackage=org.kde.breezedark.desktop
|
|
widgetStyle=Breeze
|
|
|
|
[Icons]
|
|
Theme=breeze-dark
|
|
|
|
[Theme]
|
|
cursorTheme=breeze_cursors
|
|
'';
|
|
})
|
|
|
|
# GPU blocks
|
|
(mkIf cfg.gpu.amd.enable {
|
|
services.xserver.videoDrivers = [ "amdgpu" ];
|
|
hardware.graphics.extraPackages = with pkgs; [
|
|
libva-vdpau-driver
|
|
libvdpau-va-gl
|
|
];
|
|
hardware.graphics.extraPackages32 = with pkgs.pkgsi686Linux; [
|
|
libva
|
|
libva-vdpau-driver
|
|
libvdpau-va-gl
|
|
];
|
|
environment.systemPackages = optionals cfg.gpu.amd.useAmdvlk [ pkgs.amdvlk ];
|
|
})
|
|
|
|
(mkIf cfg.gpu.intel.enable {
|
|
services.xserver.videoDrivers = [ "modesetting" ];
|
|
hardware.graphics.extraPackages =
|
|
with pkgs;
|
|
[
|
|
intel-media-driver
|
|
libvdpau-va-gl
|
|
]
|
|
++ optionals cfg.gpu.intel.legacyVaapi [ pkgs.vaapiIntel ];
|
|
hardware.graphics.extraPackages32 =
|
|
with pkgs.pkgsi686Linux;
|
|
[
|
|
libva
|
|
libvdpau-va-gl
|
|
]
|
|
++ optionals cfg.gpu.intel.legacyVaapi [ pkgs.vaapiIntel ];
|
|
})
|
|
|
|
(mkIf cfg.gpu.nvidia.enable {
|
|
services.xserver.videoDrivers = [ "nvidia" ];
|
|
hardware.nvidia = {
|
|
package = cfg.gpu.nvidia.package;
|
|
modesetting.enable = true;
|
|
powerManagement.enable = true;
|
|
open = cfg.gpu.nvidia.open;
|
|
nvidiaSettings = true;
|
|
};
|
|
environment.sessionVariables = {
|
|
GBM_BACKEND = "nvidia-drm";
|
|
__GL_GSYNC_ALLOWED = "0";
|
|
__GL_VRR_ALLOWED = "0";
|
|
};
|
|
})
|
|
|
|
# Japanese
|
|
({
|
|
i18n.inputMethod = {
|
|
enable = true;
|
|
type = "fcitx5";
|
|
fcitx5 = {
|
|
waylandFrontend = true;
|
|
ignoreUserConfig = true;
|
|
addons = with pkgs; [ fcitx5-mozc ];
|
|
settings = {
|
|
globalOptions = {
|
|
"Hotkey/TriggerKeys" = {
|
|
"0" = "Alt+space";
|
|
};
|
|
};
|
|
inputMethod = {
|
|
"Groups/0" = {
|
|
Name = "Default";
|
|
"Default Layout" = "us";
|
|
DefaultIM = "keyboard-us";
|
|
};
|
|
"Groups/0/Items/0".Name = "keyboard-us";
|
|
"Groups/0/Items/1".Name = "mozc";
|
|
};
|
|
};
|
|
};
|
|
};
|
|
})
|
|
|
|
{
|
|
assertions = [
|
|
{
|
|
assertion = oneGpuEnabled;
|
|
message = "Enable at most one of ringofstorms.dePlasma.gpu.{nvidia,amd,intel}.enable.";
|
|
}
|
|
];
|
|
}
|
|
]);
|
|
}
|