Skip to content

nazarewk/plasma-manager

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

74 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Manage KDE Plasma with Home Manager

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

Configuration is broken down into three layers:

  1. High-level interface like many Home Manager modules:

    {
      programs.plasma = {
        workspace = {
          clickItemTo = "select";
          tooltipDelay = 5;
          theme = "breeze-dark";
          colorScheme = "BreezeDark";
          wallpaper = "${pkgs.libsForQt5.plasma-workspace-wallpapers}/share/wallpapers/Kay/contents/images/1080x1920.png";
        };
    
        kwin.titlebarButtons = {
         left = [ "on-all-desktops" "keep-above-windows" ];
         right = [ "help" "minimize" "maximize" "close" ]
       };
        
        spectacle.shortcuts = {
          captureActiveWindow = "Meta+Print";
          captureCurrentMonitor = "Print";
          captureEntireDesktop = "Shift+Print";
          captureRectangularRegion = "Meta+Shift+S";
          captureWindowUnderCursor = "Meta+Ctrl+Print";
          launch = "Meta+S";
          launchWithoutCapturing = "Meta+Alt+S";
        };
      };
    }

    This layer is doesn't currently have many options. If using a high-level interface like this sounds interesting to you please consider contributing more options.

  2. Mid-level interface:

    {
      programs.plasma = {
        shortcuts.kwin = {
          "Switch Window Down" = "Meta+J";
          "Switch Window Left" = "Meta+H";
          "Switch Window Right" = "Meta+L";
          "Switch Window Up" = "Meta+K";
        };
      };
    }

    This layer is considered mid level because, while it generates a great deal of configuration for you, you must still know the name of the corresponding KDE setting to use it. (See information about the rc2nix tool below.)

  3. A low-level interface:

    {
      programs.plasma = {
        configFile."baloofilerc"."Basic Settings"."Indexing-Enabled".value = false;
      };
    }

    The other two layers ultimately generate Nix configuration for this low-level layer. Configuration at this level is essentially in the final state before being sent to our custom configuration-writing script (which is very similar to kwriteconfig5).

For some examples see the example directory.

Capturing Your Current Configuration

To make it easier to migrate to Plasma Manger, and to help maintain your Nix configuration, 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.

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

nix run github:pjones/plasma-manager

Contributions and Maintenance

I consider this a community project and welcome all contributions. If there's enough interest I would love to move this into nix-community once it has matured.

That said, this project works well enough for my needs. I don't have enough free time to maintain this project on my own. Therefore I won't be able to fix issues or implement new features without help.

Special Thanks

This work was inspired by the suggestions on Home Manger Issue #607 by people such as bew and kurnevsky. Thank you.

About

Manage KDE Plasma with Home Manager

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Nix 80.2%
  • Ruby 11.7%
  • Python 8.1%