attempt plasma flake
This commit is contained in:
parent
dac2d0cf9c
commit
012e493ad3
12 changed files with 561 additions and 5 deletions
372
flakes/de_plasma/de_plasma.nix
Normal file
372
flakes/de_plasma/de_plasma.nix
Normal file
|
|
@ -0,0 +1,372 @@
|
|||
{
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
plasma-manager,
|
||||
...
|
||||
}:
|
||||
let
|
||||
inherit (lib)
|
||||
mkOption
|
||||
types
|
||||
mkEnableOption
|
||||
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;
|
||||
panelDefaults = {
|
||||
enabled = true;
|
||||
location = "top";
|
||||
height = 28;
|
||||
opacity = "translucent"; # "adaptive" | "translucent" | "opaque"
|
||||
widgets = [
|
||||
"org.kde.plasma.kickoff"
|
||||
"org.kde.plasma.icontasks"
|
||||
"org.kde.plasma.systemtray"
|
||||
"org.kde.plasma.networkmanagement"
|
||||
"org.kde.plasma.bluetooth"
|
||||
"org.kde.plasma.volume"
|
||||
"org.kde.plasma.battery"
|
||||
"org.kde.plasma.powerprofiles"
|
||||
"org.kde.plasma.notifications"
|
||||
"org.kde.plasma.digitalclock"
|
||||
];
|
||||
};
|
||||
in
|
||||
{
|
||||
options.ringofstorms.dePlasma = {
|
||||
enable = mkEnableOption "KDE Plasma desktop";
|
||||
|
||||
wayland = mkOption {
|
||||
type = types.bool;
|
||||
default = true;
|
||||
description = "Enable SDDM Wayland and Plasma Wayland session.";
|
||||
};
|
||||
|
||||
appearance.dark.enable = mkOption {
|
||||
type = types.bool;
|
||||
default = true;
|
||||
description = "Enable Breeze Dark, GTK Breeze-Dark, and dark cursors.";
|
||||
};
|
||||
|
||||
flatpak.enable = mkOption {
|
||||
type = types.bool;
|
||||
default = false;
|
||||
description = "Enable Flatpak.";
|
||||
};
|
||||
|
||||
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;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
panel = {
|
||||
enabled = mkOption {
|
||||
type = types.bool;
|
||||
default = panelDefaults.enabled;
|
||||
};
|
||||
location = mkOption {
|
||||
type = types.enum [
|
||||
"top"
|
||||
"bottom"
|
||||
"left"
|
||||
"right"
|
||||
];
|
||||
default = panelDefaults.location;
|
||||
};
|
||||
height = mkOption {
|
||||
type = types.int;
|
||||
default = panelDefaults.height;
|
||||
};
|
||||
opacity = mkOption {
|
||||
type = types.enum [
|
||||
"adaptive"
|
||||
"translucent"
|
||||
"opaque"
|
||||
];
|
||||
default = panelDefaults.opacity;
|
||||
};
|
||||
widgets = mkOption {
|
||||
type = types.listOf types.str;
|
||||
default = panelDefaults.widgets;
|
||||
};
|
||||
};
|
||||
|
||||
shortcuts = {
|
||||
terminal = mkOption {
|
||||
type = types.str;
|
||||
default = "kitty";
|
||||
};
|
||||
launcher = mkOption {
|
||||
type = types.enum [
|
||||
"krunner"
|
||||
"rofi"
|
||||
];
|
||||
default = "krunner";
|
||||
};
|
||||
useI3Like = mkOption {
|
||||
type = types.bool;
|
||||
default = true;
|
||||
};
|
||||
closeWindow = mkOption {
|
||||
type = types.str;
|
||||
default = "Meta+Q";
|
||||
};
|
||||
workspaceKeys = mkOption {
|
||||
type = types.listOf types.str;
|
||||
default = [
|
||||
"Meta+1"
|
||||
"Meta+2"
|
||||
"Meta+3"
|
||||
"Meta+4"
|
||||
"Meta+5"
|
||||
"Meta+6"
|
||||
"Meta+7"
|
||||
"Meta+8"
|
||||
"Meta+9"
|
||||
];
|
||||
};
|
||||
moveWindowWorkspaceKeys = mkOption {
|
||||
type = types.listOf types.str;
|
||||
default = [
|
||||
"Meta+Shift+1"
|
||||
"Meta+Shift+2"
|
||||
"Meta+Shift+3"
|
||||
"Meta+Shift+4"
|
||||
"Meta+Shift+5"
|
||||
"Meta+Shift+6"
|
||||
"Meta+Shift+7"
|
||||
"Meta+Shift+8"
|
||||
"Meta+Shift+9"
|
||||
];
|
||||
};
|
||||
};
|
||||
|
||||
monitors = {
|
||||
enableOverrides = mkOption {
|
||||
type = types.bool;
|
||||
default = false;
|
||||
};
|
||||
commands = mkOption {
|
||||
type = types.listOf types.str;
|
||||
default = [ ];
|
||||
};
|
||||
scriptDelayMs = mkOption {
|
||||
type = types.int;
|
||||
default = 500;
|
||||
};
|
||||
};
|
||||
|
||||
apps.include = mkOption {
|
||||
type = types.listOf types.package;
|
||||
default = with pkgs; [
|
||||
kdePackages.kde-gtk-config
|
||||
kdePackages.konsole
|
||||
kdePackages.dolphin
|
||||
kdePackages.spectacle
|
||||
kdePackages.plasma-browser-integration
|
||||
kdePackages.plasma-workspace-wallpapers
|
||||
];
|
||||
};
|
||||
};
|
||||
|
||||
config = mkIf cfg.enable (mkMerge [
|
||||
{
|
||||
services.displayManager.sddm = {
|
||||
enable = true;
|
||||
wayland.enable = cfg.wayland;
|
||||
theme = "breeze";
|
||||
autoLogin = mkIf (cfg.sddm.autologinUser != null) {
|
||||
enable = true;
|
||||
user = cfg.sddm.autologinUser;
|
||||
};
|
||||
};
|
||||
services.desktopManager.plasma6.enable = true;
|
||||
|
||||
# Portals
|
||||
xdg.portal.enable = true;
|
||||
xdg.portal.extraPortals = [ pkgs.xdg-desktop-portal-gtk ];
|
||||
|
||||
# Audio / IPC
|
||||
services.pipewire = {
|
||||
enable = true;
|
||||
alsa.enable = true;
|
||||
pulse.enable = true;
|
||||
wireplumber.enable = true;
|
||||
};
|
||||
|
||||
services.power-profiles-daemon.enable = true;
|
||||
services.flatpak.enable = cfg.flatpak.enable;
|
||||
|
||||
# Wayland-friendly Electron/Chromium
|
||||
environment.sessionVariables.NIXOS_OZONE_WL = "1";
|
||||
|
||||
# OpenGL base
|
||||
hardware.opengl = {
|
||||
enable = true;
|
||||
driSupport32Bit = cfg.gpu.enable32Bit;
|
||||
};
|
||||
|
||||
# KDEConnect
|
||||
programs.kdeconnect.enable = true;
|
||||
|
||||
# Useful KDE packages
|
||||
environment.systemPackages = cfg.apps.include;
|
||||
|
||||
# Keyboard like sway/i3
|
||||
console.useXkbConfig = true;
|
||||
services.xserver.xkb = {
|
||||
layout = "us";
|
||||
options = "caps:escape";
|
||||
};
|
||||
|
||||
# Home Manager modules (plasma-manager + our HM layer)
|
||||
home-manager.sharedModules = [
|
||||
plasma-manager.homeManagerModules.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.opengl.extraPackages = with pkgs; [
|
||||
vaapiVdpau
|
||||
libvdpau-va-gl
|
||||
];
|
||||
hardware.opengl.extraPackages32 = with pkgs.pkgsi686Linux; [
|
||||
libva
|
||||
vaapiVdpau
|
||||
libvdpau-va-gl
|
||||
];
|
||||
environment.systemPackages = optionals cfg.gpu.amd.useAmdvlk [ pkgs.amdvlk ];
|
||||
})
|
||||
|
||||
(mkIf cfg.gpu.intel.enable {
|
||||
services.xserver.videoDrivers = [ "modesetting" ];
|
||||
hardware.opengl.extraPackages =
|
||||
with pkgs;
|
||||
[
|
||||
intel-media-driver
|
||||
libvdpau-va-gl
|
||||
]
|
||||
++ optionals cfg.gpu.intel.legacyVaapi [ pkgs.vaapiIntel ];
|
||||
hardware.opengl.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";
|
||||
};
|
||||
})
|
||||
|
||||
{
|
||||
assertions = [
|
||||
{
|
||||
assertion = oneGpuEnabled;
|
||||
message = "Enable at most one of ringofstorms.dePlasma.gpu.{nvidia,amd,intel}.enable.";
|
||||
}
|
||||
];
|
||||
}
|
||||
]);
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue