From 4c1e79088c9eed34293313b721e47c5713b37876 Mon Sep 17 00:00:00 2001 From: Chris Cochrun Date: Wed, 4 Sep 2024 10:31:46 -0500 Subject: [PATCH] adding a plasma.nix to potentially config plasma --- flake.nix | 7 ++ home/home.nix | 1 + modules/plasma.nix | 282 +++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 290 insertions(+) create mode 100644 modules/plasma.nix diff --git a/flake.nix b/flake.nix index 8fab645..5e964d8 100644 --- a/flake.nix +++ b/flake.nix @@ -9,6 +9,11 @@ url = "github:nix-community/home-manager/master"; inputs.nixpkgs.follows = "nixpkgs"; }; + plasma-manager = { + url = "githube:nix-community/plasma-manager"; + inputs.nixpkgs.follows = "nixpkgs"; + inputs.home-manager.follows = "home-manager"; + }; stylix = { url = "github:danth/stylix"; inputs.nixpkgs.follows = "nixpkgs"; @@ -69,6 +74,7 @@ outputs = { nixpkgs, nixpkgs-stable, home-manager, + plasma-manager, # hyprland, quickemu, nixos-hardware, @@ -131,6 +137,7 @@ home-manager.useUserPackages = true; home-manager.extraSpecialArgs = { inherit ags; }; home-manager.users.chris = import ./home/home.nix; + home-manager.sharedModules = [ plasma-manager.homeManagerModules.plasma-manager ]; } ]; }; diff --git a/home/home.nix b/home/home.nix index 0dd9337..760eea3 100644 --- a/home/home.nix +++ b/home/home.nix @@ -7,6 +7,7 @@ in imports = [ ./modules/hyprland.nix ags.homeManagerModules.default + # ./modules/plasma.nix ]; # Home Manager needs a bit of information about you and the # paths it should manage. diff --git a/modules/plasma.nix b/modules/plasma.nix new file mode 100644 index 0000000..2758d5b --- /dev/null +++ b/modules/plasma.nix @@ -0,0 +1,282 @@ +{ pkgs, ... }: +{ + programs.plasma = { + enable = true; + # + # Some high-level settings: + # + workspace = { + clickItemTo = "open"; # If you liked the click-to-open default from plasma 5 + lookAndFeel = "org.kde.breezedark.desktop"; + cursor = { + theme = "Bibata-Modern-Ice"; + size = 32; + }; + iconTheme = "Papirus-Dark"; + wallpaper = "${pkgs.kdePackages.plasma-workspace-wallpapers}/share/wallpapers/Patak/contents/images/1080x1920.png"; + }; + + hotkeys.commands."launch-konsole" = { + name = "Launch Konsole"; + key = "Meta+Alt+K"; + command = "konsole"; + }; + + fonts = { + general = { + family = "JetBrains Mono"; + pointSize = 12; + }; + }; + + 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"; + }; + preferredSource = "spotify"; + musicControls.showPlaybackControls = true; + songText = { + displayInSeparateLines = true; + maximumWidth = 640; + scrolling = { + behavior = "alwaysScroll"; + speed = 3; + }; + }; + }; + } + ]; + } + ]; + + window-rules = [ + { + description = "Dolphin"; + match = { + window-class = { + value = "dolphin"; + type = "substring"; + }; + window-types = [ "normal" ]; + }; + apply = { + noborder = { + value = true; + apply = "force"; + }; + # `apply` defaults to "apply-initially" + maximizehoriz = true; + maximizevert = true; + }; + } + ]; + + powerdevil = { + AC = { + powerButtonAction = "lockScreen"; + autoSuspend = { + action = "shutDown"; + idleTimeout = 1000; + }; + turnOffDisplay = { + idleTimeout = 1000; + idleTimeoutWhenLocked = "immediately"; + }; + }; + battery = { + powerButtonAction = "sleep"; + whenSleepingEnter = "standbyThenHibernate"; + }; + lowBattery = { + whenLaptopLidClosed = "hibernate"; + }; + }; + + 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"; + }; + }; + + + # + # 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"; + }; + }; + }; +}