Giter VIP home page Giter VIP logo

plasma-manager's Introduction

Manage KDE Plasma with Home Manager

This project aims to provide Home Manager modules which allow you to configure KDE Plasma using Nix.

Table of contents

Supported versions

plasma-manager supports both plasma 5 and plasma 6. The trunk branch is the most up-to-date branch and is mainly focused on plasma 6, but may still work on plasma 5. If you are running plasma 5, it's recommended to use the plasma-5 branch, which is designed to have better compatibility with plasma 5. To do this with flakes you can use "github:nix-community/plasma-manager/plasma-5" as your flake url, or if you are using nix-channels you can set the channel url to "https://github.com/nix-community/plasma-manager/archive/plasma-5.tar.gz". It's worth noting that the plasma 5 branch, due to the extra work required for maintaining, may lag behind a bit in features, but in general it should be less broken when used with plasma 5. If you want the best experience with plasma-manager it's recommended running plasma 6.

What's supported

At the moment plasma-manager supports configuring the following:

  • KDE configuration files (via the files module)
  • Global themes, colorschemes, icons, cursortheme, wallpaper (via the workspace module)
  • Configuration of spectacle shortcuts (via the spectacle module)
  • Shortcuts (via the shortcuts module)
  • Hotkeys (via the hotkeys module)
  • Panels and Extra Widgets (via the panels module)
  • Screen locker (via the kscreenlocker module)
  • Fonts (via the fonts module)
  • Window Rules (via the window-rules module)
  • KDE apps (via the apps module). In particular the following kde apps have modules in plasma-manager:
    • kate
    • konsole
    • okular

Additionally there are more functionality than just listed above, and more functionality to come in the future!

What's not well supported (at the moment)

There also are some things which at the moment isn't very well supported, in particular:

  • Real-time updates of configuration without having to log out and back in
  • Configuration of LibInput devices (see #47 and #123)
  • Usage of high-level modules in the configuration generated by rc2nix
  • Keybindings to some key combinations (Ctrl+Alt+T and Print for example, see #109 and #136)

There may also be more things we aren't aware of. If you find some other limitations don't hesitate to open an issue or submit a pr.

What will not be supported

There are some things which are out of bounds for this project due to technical reasons. For example

  • SDDM configuration (requires root-privileges and thus not suited for a home-manager module)

Getting started

We provide some examples to help you get started. These are located in the examples directory. Here you in particular can find:

With more to come! These should give you some idea how to get started with plasma-manager.

Make your configuration more declarative with overrideConfig

By default plasma-manager will simply write the specified configurations to various config-files and leave all other options alone. This way settings not specified in plasma-manager will be left alone, meaning that configurations made outside plasma-manager will still be set. This can lead to different settings on different machines even with the same plasma-manager configuration. If you like a declarative approach better consider enabling overrideConfig. This makes it so all options not set by plasma-manager will be set to the default on login. In practice this then becomes a declarative setup, much like what you would expect from most home-manager options/modules.

One thing to keep in mind is that enabling this option will delete all the KDE config-files on home-manager activation, and replace them with config-files generated by plasma-manager. Therefore make sure you backup your KDE config-files before enabling this option if you don't want to lose them.

Capturing Your Current Configuration with rc2nix

To make it easier to migrate to plasma-manager, and to help maintain your Nix configuration when not using overrideConfig, this project includes a tool called rc2nix.

This tool will read KDE configuration files and translate them to Nix. The translated configuration is written to standard output. This makes it easy to:

  • Generate an initial Plasma Manager configuration file.
  • See what settings are changed by a GUI tool by capturing a file before and after using the tool and then using diff.

Keep in mind that the rc2nix module isn't perfect and often will give somewhat suboptimal configurations (it will in some cases prefer using the files module when better configurations can be achieved using higher-level modules). However, it is still a useful tool to quickly get your configuration up and running or converting config-files generated by the gui settings app to nix expressions.

To run the rc2nix tool without having to clone this repository run the following shell command:

nix run github:nix-community/plasma-manager

Contributions and Maintenance

This is a community project and we welcome all contributions. KDE plasma and its apps consists of a lot of configuration options, and if you find that some options are missing and have the skills to implement this, PRs are very welcome. Issues are also welcome for everything from feature-requests to bug-reports or just general suggestions for improving the project.

Special Thanks

plasma-manager started off it's development under pjones, whose contributions have laid the foundation of the project to this day. The project was otherwise inspired by the suggestions on Home Manager Issue #607 by people such as bew and kurnevsky. Thank you.

plasma-manager's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

plasma-manager's Issues

How to use without flakes?

A newbie question here - how can I use this module without flakes?

My current home manager config is minimalistic as in the below and is simply imported into configuration.nix.
How can I add plasma-manager module to it (directly from this github repo) ?

{ config, pkgs, ... }:

{

  imports = [
    <home-manager/nixos>
  ];
  
  home-manager.useUserPackages = true;
  home-manager.useGlobalPkgs = true;

  home-manager.users.foo = { pkgs, ... }: {
    home.stateVersion = "22.11";
    home.packages = with pkgs; [
        zoom-us
    ];
    programs.bash.enable = true;
    programs.direnv.enable = true;

  };

}

I'm on NixOS 22.11 amd64

Migrate from KHotkeys to KGlobalAccel for custom command shortcuts

As explained here, KHotkeys has been deprecated in favor of KGlobalAccel. As such, I've done some investigative work to determine what the "Add Command..." button does in the Shortcuts system settings menu.

Creating a new command creates a new .desktop file in ~/.local/share/applications/, containing the following:

[Desktop Entry]
Exec=test
Name=test
NoDisplay=true
StartupNotify=false
Type=Application
X-KDE-GlobalAccel-CommandShortcut=true

This file is then referenced in ~/.config/kglobalshortcutsrc:

[test-2.desktop]
_k_friendly_name=test
_launch=none,none,test

I believe the .desktop file can be named anything, as long as it is unique.

References:

services/<program>."_launch" not working

I want to open the Warp app with Ctrl + Alt + T. This is what nix run github:pjones/plasma-manager shows:
In configFile:

"services/dev.warp.Warp.desktop"."_launch" = "Ctrl+Alt+T";

and I get this error: error: A definition for option programs.plasma.configFile."services/dev.warp.Warp.desktop"._launch' is not of type attribute set of (submodule)'.

Support for configuring panels

This is a tracker issue for planned support of configuring panels from plasma-manager. A.t.m. I don't see a way to do this, but it should be possible to do using some javascript and qdbus (I have done something similar before). I'll try to put some effort into this in about a month and see if this is a possibility. It should be possible to configure the following among other things:

  • panel-height
  • panel-location
  • widgets and widget settings

However I do believe there is going to be some limitations on the plasma-side from what I can remember from last time I tried this out. https://develop.kde.org/docs/plasma/kwin/ should be of help here. Maybe things are a little better in plasma 6 as well hopefully when it comes to the scripting possibilities, though I have not heard anything about that.

Broken handling of periods

Unfortunately there are KDE settings with periods in the group name, which leads to incorrect names being sent to kwriteconfig5, and thus the resulting files.

An example of this
files."kwinrc"."org.kde.kdecoration2"."ButtonsOnRight" = "SBFIAX";
leads to

[org][kde][kdecoration2]
ButtonsOnRight=SBFIAX

instead of the desired

[org.kde.kdecoration2]
ButtonsOnRight=SBFIAX

Featue Request Virtual Desktop

I would love to see an option where you can set how many virtual desktop you want to have.

for example:

programs.plasma.virtualDesktops = {
  rows: [
    [
      "Desktop 1 Row 1"
      "Desktop 2 Row1"
    ]
    [
      "Desktop 1 Row 2"
      "Desktop 2 Row2"
    ]
  ];
  animation = "slide";    # or fade
}

Explanation:

  • Every list int the list programs.plasma.virtualDesktops.rows is one row. Each string in the (inner) list is a name of a desktop.
  • animation is the animation that you can select for switching between them.

WidgetConfig

Hey,
I updated my flake and saw the new "config per widget" option, thats nice. But if I add my launchers to my pannel it dont work. it replaces every "," with an "//,":

should be:
launchers=applications:org.kde.dolphin.desktop,preferred://browser,applications:com.valvesoftware.Steam.desktop,applications:net.lutris.Lutris.desktop,applications:net.lutris.league-of-legends-1.desktop,applications:org.remmina.Remmina.desktop"

is actually:
launchers=applications:org.kde.dolphin.desktop\\,preferred://browser\\,applications:com.valvesoftware.Steam.desktop\\,applications:net.lutris.Lutris.desktop\\,applications:net.lutris.league-of-legends-1.desktop\\,applications:org.remmina.Remmina.desktop

my code is here:
https://github.com/Svenum/NixOS-Config/blob/plasma-manager/users/sven/plasma.nix

Shortcuts with multiple key combinations are set incorrectly

Making meta+ctrl+up and meta+ctrl+right switch one desktop to the right though the settings writes Switch One Desktop to the Right=Meta+Ctrl+Up\tMeta+Ctrl+Right,Meta+Ctrl+Right,Switch One Desktop to the Right in .config/kglobalshortcutsrc, while doing the same thing with plasma manager with

shortcuts = {
	"kwin" = {
		"Switch One Desktop to the Left" = [ "Meta+Ctrl+Left" ];
		"Switch One Desktop to the Right" = [ "Meta+Ctrl+Right" "Meta+Ctrl+Up"];
	};
};

writes Switch One Desktop to the Right=Meta+Ctrl+Right\tMeta+Ctrl+Up,,, which doesn't work

Configuring LibInput devices

I happen to use natural scrolling and a few other options on my laptop touchpad.
These option are set in ~/.config/kcminputrc as

[Libinput][10182][480][GXTP7863:00 27C6:01E0 Touchpad]
DisableWhileTyping=false
NaturalScroll=true
TapToClick=true

I'd like to use these same settings for any laptop I (will) use.
As you can see the group name is kinda device-specific: for sure the last part ([GXTP7863:00 27C6:01E0 Touchpad]) is the name of the input device as it shows in libinput list-devices; I still haven't figured out what the other two numbers are ([10182] and [480]).

For now I can just hardcode them in my config but I don't think that's the best solution..

If someone manages to figure out what the other two numbers are we could query them at activation-time and have an option to enable or disable such features for any touchpad.

hotkeys trigger disappearing when boot

My hotkeys configuration:

{
hotkeys.commands = {
         "alacritty" = {
           comment = "default terminal";
           key = "Meta+Return";
           command = "alacritty";
         };
  
         "dropdown" = {
           comment = "dropdown terminal";
          key = "Meta+`";
          command = ''tdrop -mtair -f "--class dropdown" alacritty'';
        };
      };
}

For example, after configure that and reboot, it works:

[Data_1Triggers0]
  Key=Meta+Return
 Type=SHORTCUT
  Uuid={6880261a8a14507fd975a5fe7d8f559bdd7d64f5f5dc77abb2482d70b4adc488}

But when i reboot again, the key of trigger disappeared:

[Data_1Triggers0]
  Key=
 Type=SHORTCUT
  Uuid={6880261a8a14507fd975a5fe7d8f559bdd7d64f5f5dc77abb2482d70b4adc488}

And reboot again. the key appeared again:

[Data_1Triggers0]
  Key=Meta+Return
 Type=SHORTCUT
  Uuid={6880261a8a14507fd975a5fe7d8f559bdd7d64f5f5dc77abb2482d70b4adc488}

I have no idea why trigger key toggle between appear and disappear, but i found a workaround, just run the configuration script once or several times manually, for example:

/nix/store/vsmybd99mxpkf9677p2mn4ikbymy3xnm-plasma-config

Rebuild crashes with error: attribute 'hm' missing

I built my configuration with the following code:

{
  inputs = {
    # Nixpkgs
    nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
    flake-utils.url = "github:numtide/flake-utils";
    plasma-manager.url = "github:pjones/plasma-manager";
    plasma-manager.inputs.nixpkgs.follows = "nixpkgs";
    plasma-manager.inputs.home-manager.follows = "home-manager";

    home-manager.url = "github:nix-community/home-manager/master";
    home-manager.inputs.nixpkgs.follows = "nixpkgs";
  };

  outputs = {
    self,
    nixpkgs,
    home-manager,
    plasma-manager,
    ...
  } @ inputs: let
    inherit (self) outputs;
  in {
    nixosConfigurations = {
      my_pc = nixpkgs.lib.nixosSystem {
        system = "x86_64-linux";
        specialArgs = {inherit inputs outputs;};
        modules = [
          # > Our main nixos configuration file <
          ./nixos/hosts/my_pc/configuration.nix
          plasma-manager.homeManagerModules.plasma-manager
        ];
      };
    };
  };
}

With home manager imported in the configuration.nix, and a generated configuration file with rc2nix imported in there.

The result I expected was that KDE plasma would be configured the way it was specified, the actual result is the following:

error:
       โ€ฆ while calling the 'seq' builtin

         at /nix/store/b0l3v8509hrl3qbv6fj2zl0mjb2rwhdy-source/lib/modules.nix:322:18:

          321|         options = checked options;
          322|         config = checked (removeAttrs config [ "_module" ]);
             |                  ^
          323|         _module = checked (config._module);

       โ€ฆ while calling the 'throw' builtin

         at /nix/store/b0l3v8509hrl3qbv6fj2zl0mjb2rwhdy-source/lib/modules.nix:298:18:

          297|                     ''
          298|             else throw baseMsg
             |                  ^
          299|         else null;

       (stack trace truncated; use '--show-trace' to show the full trace)

       error: attribute 'hm' missing

       at /nix/store/2f2syyw00fz491cg0krxzff7yb7cdriq-source/modules/files.nix:153:41:

          152|   config = lib.mkIf (plasmaCfg.enable && (builtins.length (builtins.attrNames cfg) > 0)) {
          153|     home.activation.configure-plasma = (lib.hm.dag.entryAfter [ "writeBoundary" ]
             |                                         ^
          154|       ''
       Did you mean one of id or or?

Am I doing something wrong, or is the module bugged right now?

Bug: attribute `hm` missing

Hi,

I got this bug when trying to use nixos-rebuild:

$ sudo nixos-rebuild switch --upgrade-all --flake path:///home/pol/Code/drupol/nixos-x260/ -v                                                                                                          
$ nix --extra-experimental-features nix-command flakes build --out-link /tmp/nixos-rebuild.X4uECp/nixos-rebuild path:///home/pol/Code/drupol/nixos-x260/#nixosConfigurations."x260".config.system.build.nixos-rebuild -v
error: attribute 'hm' missing

       at /nix/store/d404zjk70v18jpzwaizl7p288pafzff0-source/modules/files.nix:58:40:

           57|   config = lib.mkIf (builtins.length (builtins.attrNames cfg) > 0) {
           58|     home.activation.configure-plasma = lib.hm.dag.entryAfter [ "writeBoundary" ] ''
             |                                        ^
           59|       $DRY_RUN_CMD ${script}
       Did you mean one of id or or?

"nix run github:pjones/plasma-manager" -> error in most recent KDE neon

Hi,

I'm new to Nix(OS) and I'm evaluating other options to my long-runner xfce such as KDE. In order to avoid issues I have with xfce (can't control most settings within HomeManager), I happily found this repository which seems to be a potential answer to my questions on how to control my desktop environment using Nix/HM.

For testing the process starting with rc2nix, I set up a fresh KDE neon qemu VM running Plasma 6.

I installed Nix using sh <(curl -L https://nixos.org/nix/install) --daemon as instructed on https://nixos.org/download.html

In the VM, (and after a reboot) I then get:

vk@kdeneon:~$ nix run github:pjones/plasma-manager
error: experimental Nix feature 'nix-command' is disabled; add '--extra-experimental-features nix-command' to enable it

vk@kdeneon:~$ nix --extra-experimental-features run github:pjones/plasma-manager
warning: unknown experimental feature 'run'
error: 'github:pjones/plasma-manager' is not a recognised command
Try 'nix --help' for more information.

vk@kdeneon:~$ 

I'm pretty sure it's not an issue with plasma-manager but rather my poor knowledge of using Nix. However, I think that my approach might be a very common approach to test your tool by Nix newbies. So you might extend the README with the "fix" for this issue to support those newcomers as well?

Thanks for your help!

Example `flake.nix` has deprecated attributes `extraModules` and `configuration`

The example flake uses deprecated attributes extraModules and configuration, see https://nix-community.github.io/home-manager/release-notes.xhtml#sec-release-22.11-highlights
Putting both plasma-manager and home.nix in modules seems to work, though (at least it builds)...
Here is my flake:

{
  description = "Home-Manager Flake";

  inputs = {
    nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";

    home-manager.url = "github:nix-community/home-manager";
    home-manager.inputs.nixpkgs.follows = "nixpkgs";
    
    plasma-manager.url = "github:pjones/plasma-manager";
    plasma-manager.inputs.nixpkgs.follows = "nixpkgs";
    plasma-manager.inputs.home-manager.follows = "home-manager";

    nixgl.url = "github:guibou/nixGL";
    
    custom-any-nix-shell.url = "github:manuelbb-upb/any-nix-shell/nix_develop";
    custom-any-nix-shell.inputs.nixpkgs.follows = "nixpkgs"; 
  };

  outputs = inputs@{ nixpkgs, home-manager, plasma-manager, nixgl, custom-any-nix-shell, ... }:
  let
    system = "x86_64-linux";
  in {
    homeConfigurations.manuelbb = home-manager.lib.homeManagerConfiguration {
      pkgs = import nixpkgs {
        inherit system;
        config.allowUnfree = true;
        overlays = [ nixgl.overlay ];
      };
      modules = [ 
        inputs.plasma-manager.homeManagerModules.plasma-manager
        ./manuelbb_config/home.nix 
      ];
      extraSpecialArgs = { inherit inputs; };
    };
  };
}

Will test a bit more and hopefully manage a PR.

Using kde theme settings to be deployed by plasma-manager module

Hello, I just discovered this module since among official home-manager modules I don't see plasma-manager that seems cool to make it official.

Usually, to set theme config on my KDE environment I use the following CLI commands to set theme, icons, cursor and background:

plasma-apply-lookandfeel -a org.kde.breezedark.desktop # It applies Plasma Global Theme and Color Scheme too
    
dbus-send --session --dest=org.kde.GtkConfig --type=method_call /GtkConfig org.kde.GtkConfig.setGtkTheme "string:$theme_name"
    
/usr/lib/plasma-changeicons "$icon_theme"
    
plasma-apply-cursortheme "$cursor_theme"
    
qdbus org.kde.plasmashell /PlasmaShell org.kde.PlasmaShell.evaluateScript "var allDesktops = desktops(); for(i=0; i<allDesktops.length; i++) { myDesktop=allDesktops[i]; print(myDesktop); myDesktop.currentConfigGroup = Array(\"Wallpaper\",\"org.kde.image\",\"General\");var wallpaper = \"$background_theme\"; myDesktop.writeConfig(\"Image\", wallpaper);print(myDesktop.readConfig(\"Image\"));}"
    
kwriteconfig5 --file kscreenlockerrc --group Greeter --group Wallpaper --group org.kde.image --group General --key Image "$background_theme"

Can plasma-manager to replicate these KDE configs? If so, how is it possible?

syntax error near unexpected token `('

here is my nix-info:

  • system: "x86_64-linux"
  • host os: Linux 6.1.69, NixOS, 23.11 (Tapir), 23.11.20231231.32f6357
  • multi-user?: yes
  • sandbox: yes
  • version: nix-env (Nix) 2.18.1
  • nixpkgs: /nix/store/pi7hsz4pfhw0m3a4nv7qwjjfdx70m7hh-source
    Here is my plasma-config after running nix run github:pjones/plasma-manager > home/desktop/config/plasma/default.nix in this pastebin.link https://pastebin.com/gKf0k9ec
    ##The error messages are down bellow:
    when doing a system rebuild i get the following errors
  • Jan 03 11:52:03 nixos hm-activate-bytesudoer[19551]: /nix/store/bhrwiq9c3zb9z7il5alfmfq9msyxi6pv-plasma-config: line 1: syntax error near unexpected token `('
  • Jan 03 11:52:03 nixos hm-activate-bytesudoer[19551]: /nix/store/bhrwiq9c3zb9z7il5alfmfq9msyxi6pv-plasma-config: line 1: `/nix/store/sxi0q32x7dwjw4j3qbc5dfzhcywlwb2k-writ>
  • Jan 03 11:52:03 nixos hm-activate-bytesudoer[19551]: GroupNesting":["Data_3_6Actions"]},"Data_3_6Actions0":{"DestinationWindow":2,"Input":"Ctrl+W\n","Type":"KEYBOARD_INP>
  • Jan 03 11:52:03 nixos systemd[1]: home-manager-bytesudoer.service: Main process exited, code=exited, status=2/INVALIDARGUMENT
    Thx in advance

Unicode not working correctly for configFile

I'm trying to set my panel to floating, this requires the following in ~/.config/plasmashellrc:

[PlasmaViews][Panel 2]
floating=1

However I don't seem able to set this up, when I do:

configFile = {
            "plasmashellrc"."PlasmaViews][Panel 2"."floating" = 1;
          };

It produces the following:

[PlasmaViews\x5d\x5bPanel 2]
floating=1

So I suppose unicode isn't correctly translated to the config files.

Is there a better way of doing this that I am missing?

Thanks.

plasma-manager isnt working with my flake.nix

`{
description = "Home Manager configuration of root";

inputs = {

plasma-manager.url = "github:pjones/plasma-manager";
plasma-manager.inputs.nixpkgs.follows = "nixpkgs";
plasma-manager.inputs.home-manager.follows = "home-manager";
nix-software-center.url = "github:snowfallorg/nix-software-center";
arion.url = "github:hercules-ci/arion";
arion.inputs.nixpkgs.follows = "nixpkgs";    
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";

nix-flatpak.url = "github:gmodena/nix-flatpak"; 
home-manager = {
  url = "github:nix-community/home-manager";
  inputs.nixpkgs.follows = "nixpkgs";
};

};

outputs = inputs@{

    self, 
    nixpkgs, 
    arion, 
    home-manager, 
    nix-flatpak, 
    plasma-manager, 
 ... }:
let
  system = "x86_64-linux";
  pkgs = nixpkgs.legacyPackages.${system};
in {

  nixosConfigurations.daspidercave = nixpkgs.lib.nixosSystem {
    inherit system;

    modules = [
      ./configuration.nix  
       home-manager.nixosModules.home-manager
       plasma-manager.nixosModules.plasma-manager   

             {
          home-manager.extraSpecialArgs = { inherit inputs; }; 
          home-manager.users."spiderunderurbed" = { pkgs, ... }: {
          home.stateVersion = "22.11";
          programs.plasma = {
              enable = true;
              workspace = {

                    clickItemTo = "select";

                    wallpaper = "/etc/nixos/wallpapers/test.jpg";

                 };
             };
         imports = [ 
            (plasma-manager + "/modules")

          ];

        };

        }

      nix-flatpak.nixosModules.nix-flatpak
      ./flatpak.nix

      {

         programs.gnupg.agent.pinentryPackage = pkgs.lib.mkForce pkgs.pinentry-qt;

      }
    ];
  };
};

}`
The title is pretty self explanitory, nixos-rebuild switch --impure works, so does home-manager switch, but there is no indication if plasma manager is working, i set the wallpaper but its not applying.

Support for configuring only through plasma-manager

At the moment when configuring kde plasma through plasma-manager it only really modifies the configurations specified, so if there are any other options they can be configured through the gui. This is all good and we should keep this an option, but one thing which would be nice is if we had a way so that only the settings specified from plasma-manager would be set, and all others kept as the defaults. This then would be much more consistent across different systems, as then effectively all the settings would be the same (at least functionality-wise). This should hopefully be possible by resetting the settings before running the kwriteconfig commands. The idea which I think this could be done would be to add an option which could be disabled by default (I think this probably makes the most sense), which if enabled does as specified above.

plasma manager theme service fails to start

When trying to apply my home manager configuration with Plasma Manager via home-manager switch --flake .#tk@beltanimal, the service is degraded:

Starting Home Manager activation
Activating checkFilesChanged
Activating checkLinkTargets
Activating writeBoundary
Activating configure-plasma
Activating installPackages
replacing old 'home-manager-path'
installing 'home-manager-path'
Activating linkGeneration
Cleaning up orphan links from /home/tk
No change so reusing latest profile generation 25
Creating home file links in /home/tk
Activating onFilesChange
Activating reloadSystemd
The user systemd session is degraded:
  UNIT                                                       LOAD   ACTIVE SUB    DESCRIPTION                     
โ— app-plasma\x2dmanager\x2dapply\[email protected] loaded failed failed Plasma Manager theme application

LOAD   = Reflects whether the unit definition was properly loaded.
ACTIVE = The high-level unit activation state, i.e. generalization of SUB.
SUB    = The low-level unit activation state, values depend on unit type.
1 loaded units listed.
Attempting to reload services anyway...

There are 126 unread and relevant news items.
Read them by running the command "home-manager news".

ร— app-plasma\x2dmanager\x2dapply\[email protected] - Plasma Manager theme application
     Loaded: loaded (/home/tk/.config/autostart/plasma-manager-apply-themes.desktop; generated)
     Active: failed (Result: exit-code) since Sat 2024-03-30 17:26:11 CET; 3min 52s ago
   Duration: 3ms
       Docs: man:systemd-xdg-autostart-generator(8)
    Process: 3587 ExecCondition=/run/current-system/sw/bin/kde-systemd-start-condition --condition ksmserver (code=exited, status=0/SUCCESS)
    Process: 3605 ExecStart=/home/tk/.local/share/plasma-manager/run_all.sh (code=exited, status=1/FAILURE)
   Main PID: 3605 (code=exited, status=1/FAILURE)
        CPU: 21ms

mrt 30 17:26:11 beltanimal systemd[1851]: Starting Plasma Manager theme application...
mrt 30 17:26:11 beltanimal systemd[1851]: Started Plasma Manager theme application.
mrt 30 17:26:11 beltanimal systemd[1851]: app-plasma\x2dmanager\x2dapply\[email protected]: Main process exited, code=exited, status=1/FAILURE
mrt 30 17:26:11 beltanimal systemd[1851]: app-plasma\x2dmanager\x2dapply\[email protected]: Failed with result 'exit-code'.

Where home manager is used, along with entire nix config: https://github.com/TimekillerTK/nix-test/blob/dev/home/tk/beltanimal.nix#L61

It's a bit puzzling, because it seems to work fine at first, then on reboot the service is in a failed state.

rc2nix hide default Plasma settings

I am trying to use plasma-manager and rc2nix to save my plasma configuration, and while rc2nix seems to work nicely the output is quite bloated for what I need. I only changed about 5 - 10 settings from the default plasma install so it would be nice if there was an easier way to find only what was changed.

How to use it in home.nix ?

I'm using NixOS with flakes, and following is my home.nix:

{ pkgs, nixosConfig, inputs, ...}: {

  imports = [
    inputs.plasma-manager.homeManagerModules.plasma-manager
    ./plasma.home.nix # generated by rc2nix
  ];

...

But following error is reported:

error: infinite recursion encountered

at /nix/store/si9r9isfbg2fl7az5w3gwwrbdpzpfvcl-source/lib/modules.nix:483:28:

482|         builtins.addErrorContext (context name)
483|           (args.${name} or config._module.args.${name})
|                            ^
484|       ) (lib.functionArgs f);
(use '--show-trace' to show detailed location information)

So how should I import it ?

Can't add shortcut for plasma-pass widget

Unfortunately rc2nix doesn't export the shortcut setting at all.
I looked into .config/kglobalshortcutsrc and found the applied shortcut setting:

[plasmashell]
...
activate widget 20=Meta+A,none,Activate Plasma Pass Widget
...

So I tried to add following nix configuration:

plasma = {
  enable = true;
  shortcuts."plasmashell"."activate widget 20" = "Meta+A";
};

this creates the following line in kglobalshortcutsrc:
activate widget 20=Meta+A,none,

But the shortcut isn't working. Is it possible to make it work?

rc2nix failing?

Hi,

I would like to give this project a try and I tried to run the tool rc2nix and it's failing:

$ nix run github:pjones/plasma-manager                                                                                                                                                                                                   
Traceback (most recent call last):
        4: from /nix/store/3nibd0z57l85g2x83wmyqr0yxqyqycdr-rc2nix.rb:216:in `<main>'
        3: from /nix/store/3nibd0z57l85g2x83wmyqr0yxqyqycdr-rc2nix.rb:130:in `run'
        2: from /nix/store/3nibd0z57l85g2x83wmyqr0yxqyqycdr-rc2nix.rb:130:in `each'
        1: from /nix/store/3nibd0z57l85g2x83wmyqr0yxqyqycdr-rc2nix.rb:136:in `block in run'
/nix/store/n8gvlg12cmxw3a37nvbafhri9pp4l494-ruby-2.7.6/lib/ruby/2.7.0/pathname.rb:522:in `relative_path_from': different prefix: "/" and "~/.config" (ArgumentError)
$

Am I doing something wrong?

Escaping `[]`

Good day,

I have the following configuration I want to apply under programs.plasma.configFile:

        "kwinrc"."Wayland"."InputMethod[$e]" = "/run/current-system/sw/share/applications/com.github.maliit.keyboard.desktop";

which results in the following broken configuration however in kwinrc

[Wayland]
InputMethod\x5b$e\x5d=/run/current-system/sw/share/applications/com.github.maliit.keyboard.desktop

Is there a way to escape [] or is it a plasma-manager bug?

Problems with plasma 6

This is a tracker issue for things not working in plasma-manager on the upcoming kde plasma 6 version. If there are any bugs/configuration-problems in plasma-manager, feel free to post them here. At the moment kde plasma isn't available for nixos, but it is available for other distributions to test some of the tools/configurations plasma-manager to find potential problems. As already noted in #59 @mlyxshi, the way we generate panels may be broken (hopefully this is just a problem with the qdbus command we send in and hence it hopefully is an easy fix).

Allow immutable properties

KDE allows immutability of most settings, which would be good to add to this (e.g. for deployments of a KDE desktop using home-manager). This is done by adding [$i] to the section header (e.g. [KDE][$i]) to make all the values in that section immutable.

I suggest doing this by adding this type of setting:

programs.plasma.configFile.kdedrc5.Module-device_automounter = {
   _immutable = true;
   autoload = false;
};

In writeConfig, you can add the [$i] to the end of the section header for this section.

I'm not 100% sure how writeConfig works (especially the python script), but I imagine it wouldn't be too difficult.

Configure kate with plasma-manager

A while ago, I started configuring kate with plasma-manager. I think it is worthwile to put my results into this project in the form of a handful new mid-level configurations.

Kate is the text editor from the KDE project and as such, its config files work in the same way as most KDE config files. This specifically implies "these are stateful config files and as such belong into the users home-environment". That is why I believe this project to be the right place for the effort.

I want to implement mid-level (high-level?) options for the following behaviour. What do you think?

  • indentation (tabs, spaces, how wide?)
  • line breaks (forced/none, at what width, \n vs \r\n)
  • The editor theme. How should the configuration react when a theme with the same filename already exist (thus, an existing file could be destroyed) or a theme with the same name (a field within the file) already exists (thus, undefined behaviour in kate could occur)?)
  • Which menus and tools to show by default, which key shortcuts to focus/unfocus/show/hide.
  • Font type, size, line-height, ... The main open question here would be: should the configuration fail if the selected font cannot be found?

Duplicated properties?

Hi,

I would like to update my KDE plasma configuration using rc2nix, when I do it, I see that there are duplicated properties, where brackets are respectively replaced with \x5b and \x5d.

See this on the diff screenshot:
image

Is it normal? Should I ignore that?

Added Apps in System Tray on panel get removed after reboot

If I add a systemtray to my panel and add to it some apps it get reseted after reboot. Is there a fix?

     panels = [
      {
         location = "left";                                                                                                                                                                                                                                                                                      
         hiding = "windowscover";   
         alignment = "right";
         widgets = [                 
           "org.kde.plasma.panelspacer"
           "org.kde.plasma.icontasks"
           "org.kde.plasma.panelspacer"
         ];                         
         height = 50;                                      
         maxLength = 1410;                                 
         minLength = 1050;                                 
       }                                                   
       {                                                   
         location = "top";                                 
         hiding = "windowscover";                          
         alignment = "center";                             
         widgets = [                                       
           "org.kde.plasma.appmenu"                        
           "org.kde.plasma.panelspacer"                    
           "org.kde.plasma.betterinlineclock"              
           "org.kde.plasma.pager"                          
           "org.kde.plasma.panelspacer"                    
           "org.kde.plasma.systemmonitor.memory"
           "org.kde.plasma.systemmonitor.cpucore"
           "org.kde.plasma.systemtray"                                                                                                                                                                                                                                                                           
           "org.kde.shutdownOrSwitch"
         ];                                              
         height = 30;                                                                                                                                                                                                                                                                                            
         maxLength = 3440;                                                                                                                                                                                                                                                                                       
         minLength = 1920;                                                                                                                                                                                                                                                                                       
       }                                                                                                                                                                                                                                                                                                         
     ];

For key "Exec" in group contains an invalid field code "%a"

After solving #103 - I've come across a new, different issue, which has to do with the command string I'm using for a hotkey:

    hotkeys.commands."alacritty-dropdown" = {
      name = "Launch Alacritty";
      key = "Alt+Space";
      command = "tdrop -a -h 90% alacritty";
    };

Error is:

error: builder for '/nix/store/dn5f2j2dbcfga84xwm9mzlc3cb2z3623-plasma-manager-commands.desktop.drv' failed with exit code 1;
       last 1 log lines:
       > /nix/store/yli5k9b9vrnf3cg6jjjckzshdbh0y8mi-plasma-manager-commands.desktop/share/applications/plasma-manager-commands.desktop: error: value "/nix/store/dzp7d4k1d94s1x49p9171mvcsfyxr7bj-systemd-254.6/bin/systemd-cat --identifier=plasma-manager-commands-alacritty-dropdown  tdrop -a -h 90% alacritty" for key "Exec" in group "Desktop Action alacritty-dropdown" contains an invalid field code "%a"
       For full logs, run 'nix log /nix/store/dn5f2j2dbcfga84xwm9mzlc3cb2z3623-plasma-manager-commands.desktop.drv'.
error: 1 dependencies of derivation '/nix/store/k0v7b7zs5vakpws67rcxq6q6ksd3q1rn-home-manager-path.drv' failed to build
error: 1 dependencies of derivation '/nix/store/qswlsl2a5dm9iwgf4bl3skrq0s75f9bz-home-manager-generation.drv' failed to build

Trying to escape the % with \ doesn't seem to work.

Full nix config is here (linked to offending line in question: https://github.com/TimekillerTK/nix-test/blob/dev/home/tk/beltanimal.nix#L73

Upcoming breaking change regarding configGroupNesting

Edit: After #94 the format has changed again. The rest of comment has been updated to address this.

There are two new changes regarding the format of configurations for the file module. One is that all keys in configFile, dataFile and file require the value property, meaning, for example. what before was:

programs.plasma = {
  configFile = {
    "krunnerrc"."General"."FreeFloating" = true;
    "kwinrc"."Desktops"."Number" = 8;
    "kwinrc"."Desktops"."Rows" = 2;
  };
};

now must be:

programs.plasma = {
  configFile = {
    "krunnerrc"."General"."FreeFloating".value = true;
    "kwinrc"."Desktops"."Number".value = 8;
    "kwinrc"."Desktops"."Rows".value = 2;
  };
};

We also had to remove the recursive attribute config format (even though it was newly introduced), because it had some limitations with extensibility.

The other difference is that the new delimiter for nested groups is /, which was changed from .. This means that where you before had:

programs.plasma.configFile."group.subgroup1.subgroup2"."key" = "value";

you now will have to use:

programs.plasma.configFile."group/subgroup1/subgroup2"."key".value = "value";

This also means that if you don't have to escape periods anymore, they can just be left as is, but if you for some reason need / in your groups, you can escape this by part1\\/part2\\/part3, which will translate to a group named part1/part2/part3 (not that there should be any reason to have / in your groups for kde plasma config-files anyway).

use `xdg.systemDirs.config` instead of directly writing the files

When writing the config files in write_config.py we can instead perhaps use something like this (mostly pseudocode):

thisConfig = conf: pkgs.mkDerivation let
    confAsJson = convConfToJson conf
in
{
   nativeBuildInputs = [ writeConfigScript  ];
   installPhase = ''
      # python script modified to write to $out instead of .config
      write_config ${confAsJson}
   '';
}

# later in configuration
xdg.systemDirs.config = [ (thisConfig processedConfigAttrs) ];

This moves the config files to the nix store, and allows them to be managed as such. Then any overwriting that wants to be done by the user can be done in their own dotfiles.

This leads to two main benefits:

  • To revert back to what is declaratively given, just simply remove the dot files in the .config directory.

  • Immutability and Reproducibility. This is the main benefit here. The files are then stored in the nix store, and therefore are managed by nix. (e.g. people having their nix store separately but shared, etc.)

The `panels` option causes the file `.config/plasma-org.kde.plasma.desktop-appletsrc` to grow indefinitely

The panels option creates new panels on every login (and removes the old ones beforehand).
All the widgets inside the new panels will then be registered in plasma-org.kde.plasma.desktop-appletsrc.
Unfortunately KDE Plasma doesn't cleanup the old entries, so the file will grow indefinitely.

I don't know if it would be safe to delete that file every time.
KDE Plasma seems to automatically regenerate the file, but maybe there are some side-effects on the containment / widget numbering.

How to use it?

Sorry for the noobness, but could you provide an example of how to integrate it with home manager?

Replace kwriteconfig5 with a custom tool

The kwriteconfig5 tool is how we currently update settings in KDE configuration files. However:

  1. It can only update one setting at a time. Trying to update a bunch of settings is slow.

  2. Some settings (e.g., khotkeysrc) use section numbers and therefore we need some way to remove old sections.

We probably need a custom tool written in C++ that can merge entire files as once. Probably from a JSON source which Nix can generate.

rc2nix.rb:117:in `===': invalid byte sequence in US-ASCII (ArgumentError)

Fail on non NixOS:


LC_ALL=en_US.UTF-8 nix --extra-experimental-features nix-command --extra-experimental-features flakes  run github:pjones/plasma-manager

/nix/store/40iwnlr30ykqm5ynm0bbk6bsjjc750ad-bash-5.1-p16/bin/bash: warning: setlocale: LC_ALL: cannot change locale (en_US.UTF-8)
Traceback (most recent call last):
        9: from /nix/store/hljv83bhp04fsavh0mvcksn65w0rpsh6-rc2nix.rb:266:in `<main>'
        8: from /nix/store/hljv83bhp04fsavh0mvcksn65w0rpsh6-rc2nix.rb:176:in `run'
        7: from /nix/store/hljv83bhp04fsavh0mvcksn65w0rpsh6-rc2nix.rb:176:in `each'
        6: from /nix/store/hljv83bhp04fsavh0mvcksn65w0rpsh6-rc2nix.rb:180:in `block in run'
        5: from /nix/store/hljv83bhp04fsavh0mvcksn65w0rpsh6-rc2nix.rb:114:in `parse'
        4: from /nix/store/hljv83bhp04fsavh0mvcksn65w0rpsh6-rc2nix.rb:114:in `open'
        3: from /nix/store/hljv83bhp04fsavh0mvcksn65w0rpsh6-rc2nix.rb:115:in `block in parse'
        2: from /nix/store/hljv83bhp04fsavh0mvcksn65w0rpsh6-rc2nix.rb:115:in `each'
        1: from /nix/store/hljv83bhp04fsavh0mvcksn65w0rpsh6-rc2nix.rb:117:in `block (2 levels) in parse'
/nix/store/hljv83bhp04fsavh0mvcksn65w0rpsh6-rc2nix.rb:117:in `===': invalid byte sequence in US-ASCII (ArgumentError)

. Escaping

I try to set my wallpaper through plasma-manager.
The corresponding config for me should be :

      "plasma-org.kde.plasma.desktop-appletsrc"."Containments.1.Wallpaper.org.kde.potd.General"."FillMode" = 2;      
      "plasma-org.kde.plasma.desktop-appletsrc"."Containments.1.Wallpaper.org.kde.potd.General"."Provider" = "unsplash";

and this should produce something like this in .config/plasma-org.kde.plasma.desktop-appletsrc :

[Containments][1][Wallpaper][org.kde.potd][General]
FillMode=2
Provider=unsplash

The problem is that the . In org.kde.potd are interpreted, and I did not find any method to escape them.
I don't have time yet to search and fix it myself. It is probably an issue in rc2nix. However, I am not sure because I am new to nix and plasma-manager.

rc2nix string literal is not escaped

I find following contents in the output of rc2nix:

"khotkeysrc"."Data_3Conditions0Window0"."Class" = "^konqueror\s";

and try "^konqueror\s" in nix repl will give you "^konquerors", which might cause error (I'm not sure)

rc2nix error: setting outside of group: MenuBar=Disabled (RuntimeError)

I am getting this error while trying to run the rc2nix script:

./rc2nix:126:in `block (2 levels) in parse': /home/nixos/.config/dolphinrc: setting outside of group: MenuBar=Disabled (RuntimeError)
        from ./rc2nix:115:in `each'
        from ./rc2nix:115:in `block in parse'
        from ./rc2nix:114:in `open'
        from ./rc2nix:114:in `parse'
        from ./rc2nix:180:in `block in run'
        from ./rc2nix:176:in `each'
        from ./rc2nix:176:in `run'
        from ./rc2nix:266:in `<main>'

Failing to run `rc2nix`

Hi,

When trying to update the KDE Plasma configuration, I got this error:

$ nix run github:pjones/plasma-manager
{
  programs.plasma = {
    enable = true;
    shortcuts = {
      "ActivityManager"."switch-to-activity-9bf60ab2-2e77-4ef0-945f-1713bcdbd756" = [ ];
      "ActivityManager"."switch-to-activity-b04cdf06-f69b-4426-a388-d784c86899b5" = [ ];
      "ActivityManager"."switch-to-activity-c245c079-af1c-41e3-991e-31836544ee97" = [ ];
      "ActivityManager"."switch-to-activity-fc6d77d8-56ad-4801-affa-5593a61db5cc" = [ ];
      "KDE Keyboard Layout Switcher"."Switch keyboard layout to Belgian" = [ ];
      "KDE Keyboard Layout Switcher"."Switch keyboard layout to English (UK)" = [ ];
      "KDE Keyboard Layout Switcher"."Switch keyboard layout to English (US)" = [ ];
      "KDE Keyboard Layout Switcher"."Switch keyboard layout to French" = [ ];
      "KDE Keyboard Layout Switcher"."Switch keyboard layout to French (legacy, alt.)" = [ ];
      "KDE Keyboard Layout Switcher"."Switch to Next Keyboard Layout" = "Ctrl+Alt+K";
      "kaccess"."Toggle Screen Reader On and Off" = "Meta+Alt+S";
      "kcm_touchpad"."Disable Touchpad" = "Touchpad Off";
      "kcm_touchpad"."Enable Touchpad" = "Touchpad On";
      "kcm_touchpad"."Toggle Touchpad" = "Touchpad Toggle";
      "kded5"."Show System Activity" = "Ctrl+Esc";
      "kded5"."display" = ["Display" "Meta+P"];
      "kmix"."decrease_microphone_volume" = "Microphone Volume Down";
      "kmix"."decrease_volume" = "Volume Down";
      "kmix"."increase_microphone_volume" = "Microphone Volume Up";
      "kmix"."increase_volume" = "Volume Up";
      "kmix"."mic_mute" = "Microphone Mute";
      "kmix"."mute" = "Volume Mute";
      "krunner.desktop"."RunClipboard" = "Alt+Shift+F2";
      "krunner.desktop"."_launch" = ["Alt+Space" "Alt+F2" "Search"];
      "ksmserver"."Halt Without Confirmation" = "Ctrl+Alt+Shift+PgDown";
      "ksmserver"."Lock Session" = ["Meta+L" "Ctrl+Alt+L" "Screensaver"];
      "ksmserver"."Log Out" = "Ctrl+Alt+Del";
      "ksmserver"."Log Out Without Confirmation" = "Ctrl+Alt+Shift+Del";
      "ksmserver"."Reboot Without Confirmation" = "Ctrl+Alt+Shift+PgUp";
      "kwin"."Activate Window Demanding Attention" = "Ctrl+Alt+A";
      "kwin"."Decrease Opacity" = [ ];
      "kwin"."Expose" = "Ctrl+F9";
      "kwin"."ExposeAll" = ["Ctrl+F10" "Launch (C)"];
      "kwin"."ExposeClass" = "Ctrl+F7";
      "kwin"."FlipSwitchAll" = [ ];
      "kwin"."FlipSwitchCurrent" = [ ];
      "kwin"."Increase Opacity" = [ ];
      "kwin"."Invert Screen Colors" = [ ];
      "kwin"."Kill Window" = "Ctrl+Alt+Esc";
      "kwin"."MoveMouseToCenter" = "Meta+F6";
      "kwin"."MoveMouseToFocus" = "Meta+F5";
      "kwin"."MoveZoomDown" = [ ];
      "kwin"."MoveZoomLeft" = [ ];
      "kwin"."MoveZoomRight" = [ ];
      "kwin"."MoveZoomUp" = [ ];
      "kwin"."Overview" = "Meta+W";
      "kwin"."Setup Window Shortcut" = [ ];
      "kwin"."Show Desktop" = "Meta+D";
      "kwin"."ShowDesktopGrid" = "Ctrl+F8";
      "kwin"."Suspend Compositing" = "Alt+Shift+F12";
      "kwin"."Switch One Desktop Down" = [ ];
      "kwin"."Switch One Desktop Up" = [ ];
      "kwin"."Switch One Desktop to the Left" = [ ];
      "kwin"."Switch One Desktop to the Right" = [ ];
      "kwin"."Switch Window Down" = "Meta+Alt+Down";
      "kwin"."Switch Window Left" = "Meta+Alt+Left";
      "kwin"."Switch Window Right" = "Meta+Alt+Right";
      "kwin"."Switch Window Up" = "Meta+Alt+Up";
      "kwin"."Switch to Desktop 1" = "Ctrl+F1";
      "kwin"."Switch to Desktop 10" = [ ];
      "kwin"."Switch to Desktop 11" = [ ];
      "kwin"."Switch to Desktop 12" = [ ];
      "kwin"."Switch to Desktop 13" = [ ];
      "kwin"."Switch to Desktop 14" = [ ];
      "kwin"."Switch to Desktop 15" = [ ];
      "kwin"."Switch to Desktop 16" = [ ];
      "kwin"."Switch to Desktop 17" = [ ];
      "kwin"."Switch to Desktop 18" = [ ];
      "kwin"."Switch to Desktop 19" = [ ];
      "kwin"."Switch to Desktop 2" = "Ctrl+F2";
      "kwin"."Switch to Desktop 20" = [ ];
      "kwin"."Switch to Desktop 3" = "Ctrl+F3";
      "kwin"."Switch to Desktop 4" = "Ctrl+F4";
      "kwin"."Switch to Desktop 5" = [ ];
      "kwin"."Switch to Desktop 6" = [ ];
      "kwin"."Switch to Desktop 7" = [ ];
      "kwin"."Switch to Desktop 8" = [ ];
      "kwin"."Switch to Desktop 9" = [ ];
      "kwin"."Switch to Next Desktop" = [ ];
      "kwin"."Switch to Next Screen" = [ ];
      "kwin"."Switch to Previous Desktop" = [ ];
      "kwin"."Switch to Previous Screen" = [ ];
      "kwin"."Switch to Screen 0" = [ ];
      "kwin"."Switch to Screen 1" = [ ];
      "kwin"."Switch to Screen 2" = [ ];
      "kwin"."Switch to Screen 3" = [ ];
      "kwin"."Switch to Screen 4" = [ ];
      "kwin"."Switch to Screen 5" = [ ];
      "kwin"."Switch to Screen 6" = [ ];
      "kwin"."Switch to Screen 7" = [ ];
      "kwin"."Toggle Night Color" = [ ];
      "kwin"."Toggle Window Raise/Lower" = [ ];
      "kwin"."ToggleCurrentThumbnail" = "Meta+Ctrl+T";
      "kwin"."Walk Through Desktop List" = [ ];
      "kwin"."Walk Through Desktop List (Reverse)" = [ ];
      "kwin"."Walk Through Desktops" = [ ];
      "kwin"."Walk Through Desktops (Reverse)" = [ ];
      "kwin"."Walk Through Windows" = "Alt+Tab";
      "kwin"."Walk Through Windows (Reverse)" = "Alt+Shift+Backtab";
      "kwin"."Walk Through Windows Alternative" = [ ];
      "kwin"."Walk Through Windows Alternative (Reverse)" = [ ];
      "kwin"."Walk Through Windows of Current Application" = [ ];
      "kwin"."Walk Through Windows of Current Application (Reverse)" = "Alt+~";
      "kwin"."Walk Through Windows of Current Application Alternative" = [ ];
      "kwin"."Walk Through Windows of Current Application Alternative (Reverse)" = [ ];
      "kwin"."Window Above Other Windows" = [ ];
      "kwin"."Window Below Other Windows" = [ ];
      "kwin"."Window Close" = "Alt+F4";
      "kwin"."Window Fullscreen" = [ ];
      "kwin"."Window Grow Horizontal" = [ ];
      "kwin"."Window Grow Vertical" = [ ];
      "kwin"."Window Lower" = [ ];
      "kwin"."Window Maximize" = "Meta+PgUp";
      "kwin"."Window Maximize Horizontal" = [ ];
      "kwin"."Window Maximize Vertical" = [ ];
      "kwin"."Window Minimize" = "Meta+PgDown";
      "kwin"."Window Move" = [ ];
      "kwin"."Window Move Center" = [ ];
      "kwin"."Window No Border" = [ ];
      "kwin"."Window On All Desktops" = [ ];
      "kwin"."Window One Desktop Down" = "Meta+Ctrl+Shift+Down";
      "kwin"."Window One Desktop Up" = "Meta+Ctrl+Shift+Up";
      "kwin"."Window One Desktop to the Left" = "Meta+Ctrl+Shift+Left";
      "kwin"."Window One Desktop to the Right" = "Meta+Ctrl+Shift+Right";
      "kwin"."Window Operations Menu" = "Alt+F3";
      "kwin"."Window Pack Down" = [ ];
      "kwin"."Window Pack Left" = [ ];
      "kwin"."Window Pack Right" = [ ];
      "kwin"."Window Pack Up" = [ ];
      "kwin"."Window Quick Tile Bottom" = "Meta+Down";
      "kwin"."Window Quick Tile Bottom Left" = [ ];
      "kwin"."Window Quick Tile Bottom Right" = [ ];
      "kwin"."Window Quick Tile Left" = "Meta+Left";
      "kwin"."Window Quick Tile Right" = "Meta+Right";
      "kwin"."Window Quick Tile Top" = "Meta+Up";
      "kwin"."Window Quick Tile Top Left" = [ ];
      "kwin"."Window Quick Tile Top Right" = [ ];
      "kwin"."Window Raise" = [ ];
      "kwin"."Window Resize" = [ ];
      "kwin"."Window Shade" = [ ];
      "kwin"."Window Shrink Horizontal" = [ ];
      "kwin"."Window Shrink Vertical" = [ ];
      "kwin"."Window to Desktop 1" = [ ];
      "kwin"."Window to Desktop 10" = [ ];
      "kwin"."Window to Desktop 11" = [ ];
      "kwin"."Window to Desktop 12" = [ ];
      "kwin"."Window to Desktop 13" = [ ];
      "kwin"."Window to Desktop 14" = [ ];
      "kwin"."Window to Desktop 15" = [ ];
      "kwin"."Window to Desktop 16" = [ ];
      "kwin"."Window to Desktop 17" = [ ];
      "kwin"."Window to Desktop 18" = [ ];
      "kwin"."Window to Desktop 19" = [ ];
      "kwin"."Window to Desktop 2" = [ ];
      "kwin"."Window to Desktop 20" = [ ];
      "kwin"."Window to Desktop 3" = [ ];
      "kwin"."Window to Desktop 4" = [ ];
      "kwin"."Window to Desktop 5" = [ ];
      "kwin"."Window to Desktop 6" = [ ];
      "kwin"."Window to Desktop 7" = [ ];
      "kwin"."Window to Desktop 8" = [ ];
      "kwin"."Window to Desktop 9" = [ ];
      "kwin"."Window to Next Desktop" = [ ];
      "kwin"."Window to Next Screen" = "Meta+Shift+Right";
      "kwin"."Window to Previous Desktop" = [ ];
      "kwin"."Window to Previous Screen" = "Meta+Shift+Left";
      "kwin"."Window to Screen 0" = [ ];
      "kwin"."Window to Screen 1" = [ ];
      "kwin"."Window to Screen 2" = [ ];
      "kwin"."Window to Screen 3" = [ ];
      "kwin"."Window to Screen 4" = [ ];
      "kwin"."Window to Screen 5" = [ ];
      "kwin"."Window to Screen 6" = [ ];
      "kwin"."Window to Screen 7" = [ ];
      "kwin"."view_actual_size" = "Meta+0";
      "kwin"."view_zoom_in" = "Meta+=";
      "kwin"."view_zoom_out" = "Meta+-";
      "mediacontrol"."mediavolumedown" = [ ];
      "mediacontrol"."mediavolumeup" = [ ];
      "mediacontrol"."nextmedia" = "Media Next";
      "mediacontrol"."pausemedia" = "Media Pause";
      "mediacontrol"."playmedia" = [ ];
      "mediacontrol"."playpausemedia" = "Media Play";
      "mediacontrol"."previousmedia" = "Media Previous";
      "mediacontrol"."stopmedia" = "Media Stop";
      "org.kde.dolphin.desktop"."_launch" = "Meta+E";
      "org.kde.krunner.desktop"."RunClipboard" = Traceback (most recent call last):
        7: from /nix/store/h05pbn16g3m80vfkd40ama2dv7rkpqrb-rc2nix.rb:249:in `<main>'
        6: from /nix/store/h05pbn16g3m80vfkd40ama2dv7rkpqrb-rc2nix.rb:177:in `run'
        5: from /nix/store/h05pbn16g3m80vfkd40ama2dv7rkpqrb-rc2nix.rb:208:in `pp_shortcuts'
        4: from /nix/store/h05pbn16g3m80vfkd40ama2dv7rkpqrb-rc2nix.rb:208:in `each'
        3: from /nix/store/h05pbn16g3m80vfkd40ama2dv7rkpqrb-rc2nix.rb:209:in `block in pp_shortcuts'
        2: from /nix/store/h05pbn16g3m80vfkd40ama2dv7rkpqrb-rc2nix.rb:209:in `each'
        1: from /nix/store/h05pbn16g3m80vfkd40ama2dv7rkpqrb-rc2nix.rb:227:in `block (2 levels) in pp_shortcuts'
/nix/store/h05pbn16g3m80vfkd40ama2dv7rkpqrb-rc2nix.rb:243:in `nix_val': undefined method `gsub' for nil:NilClass (NoMethodError)
$

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.