aboutsummaryrefslogtreecommitdiff
path: root/modules/services/compton.nix
diff options
context:
space:
mode:
authorSilvan Mosberger <infinisil@icloud.com>2017-09-22 22:42:37 +0200
committerNikita Uvarov <uv.nikita@gmail.com>2017-09-26 14:06:13 +0200
commitbf9b9026d9b8b060332b19f7d120da1ae6a3380f (patch)
treee0acfdb51d8c03dea722aca3136322bfca6ae618 /modules/services/compton.nix
parent0f096f9ad40f2fb055f4b696f16450d7487cd895 (diff)
compton: extend module
Diffstat (limited to 'modules/services/compton.nix')
-rw-r--r--modules/services/compton.nix206
1 files changed, 200 insertions, 6 deletions
diff --git a/modules/services/compton.nix b/modules/services/compton.nix
index e1c349971db..f425db8ab06 100644
--- a/modules/services/compton.nix
+++ b/modules/services/compton.nix
@@ -1,15 +1,207 @@
{ config, lib, pkgs, ... }:
with lib;
+with builtins;
-{
- options = {
- services.compton = {
- enable = mkEnableOption "Compton X11 compositor";
+let
+
+ cfg = config.services.compton;
+
+ configFile = pkgs.writeText "compton.conf"
+ (optionalString cfg.fade ''
+ # fading
+ fading = true;
+ fade-delta = ${toString cfg.fadeDelta};
+ fade-in-step = ${elemAt cfg.fadeSteps 0};
+ fade-out-step = ${elemAt cfg.fadeSteps 1};
+ fade-exclude = ${toJSON cfg.fadeExclude};
+ '' +
+ optionalString cfg.shadow ''
+
+ # shadows
+ shadow = true;
+ shadow-offset-x = ${toString (elemAt cfg.shadowOffsets 0)};
+ shadow-offset-y = ${toString (elemAt cfg.shadowOffsets 1)};
+ shadow-opacity = ${cfg.shadowOpacity};
+ shadow-exclude = ${toJSON cfg.shadowExclude};
+ '' + ''
+ # opacity
+ active-opacity = ${cfg.activeOpacity};
+ inactive-opacity = ${cfg.inactiveOpacity};
+ menu-opacity = ${cfg.menuOpacity};
+
+ # other options
+ backend = ${toJSON cfg.backend};
+ vsync = ${toJSON cfg.vSync};
+ refresh-rate = ${toString cfg.refreshRate};
+ '' + cfg.extraOptions);
+
+in {
+
+ options.services.compton = {
+ enable = mkEnableOption "Compton X11 compositor";
+
+ fade = mkOption {
+ type = types.bool;
+ default = false;
+ description = ''
+ Fade windows in and out.
+ '';
+ };
+
+ fadeDelta = mkOption {
+ type = types.int;
+ default = 10;
+ example = 5;
+ description = ''
+ Time between fade animation step (in ms).
+ '';
+ };
+
+ fadeSteps = mkOption {
+ type = types.listOf types.str;
+ default = [ "0.028" "0.03" ];
+ example = [ "0.04" "0.04" ];
+ description = ''
+ Opacity change between fade steps (in and out).
+ '';
+ };
+
+ fadeExclude = mkOption {
+ type = types.listOf types.str;
+ default = [];
+ example = [
+ "window_type *= 'menu'"
+ "name ~= 'Firefox$'"
+ "focused = 1"
+ ];
+ description = ''
+ List of conditions of windows that should not be faded.
+ See <literal>compton(1)</literal> man page for more examples.
+ '';
+ };
+
+ shadow = mkOption {
+ type = types.bool;
+ default = false;
+ description = ''
+ Draw window shadows.
+ '';
+ };
+
+ shadowOffsets = mkOption {
+ type = types.listOf types.int;
+ default = [ (-15) (-15) ];
+ example = [ (-10) (-15) ];
+ description = ''
+ Left and right offset for shadows (in pixels).
+ '';
+ };
+
+ shadowOpacity = mkOption {
+ type = types.str;
+ default = "0.75";
+ example = "0.8";
+ description = ''
+ Window shadows opacity (number in range 0 - 1).
+ '';
+ };
+
+ shadowExclude = mkOption {
+ type = types.listOf types.str;
+ default = [];
+ example = [
+ "window_type *= 'menu'"
+ "name ~= 'Firefox$'"
+ "focused = 1"
+ ];
+ description = ''
+ List of conditions of windows that should have no shadow.
+ See <literal>compton(1)</literal> man page for more examples.
+ '';
+ };
+
+ activeOpacity = mkOption {
+ type = types.str;
+ default = "1.0";
+ example = "0.8";
+ description = ''
+ Opacity of active windows.
+ '';
+ };
+
+ inactiveOpacity = mkOption {
+ type = types.str;
+ default = "1.0";
+ example = "0.8";
+ description = ''
+ Opacity of inactive windows.
+ '';
+ };
+
+ menuOpacity = mkOption {
+ type = types.str;
+ default = "1.0";
+ example = "0.8";
+ description = ''
+ Opacity of dropdown and popup menu.
+ '';
+ };
+
+ backend = mkOption {
+ type = types.str;
+ default = "glx";
+ description = ''
+ Backend to use: <literal>glx</literal> or <literal>xrender</literal>.
+ '';
+ };
+
+ vSync = mkOption {
+ type = types.str;
+ default = "none";
+ example = "opengl-swc";
+ description = ''
+ Enable vertical synchronization using the specified method.
+ See <literal>compton(1)</literal> man page available methods.
+ '';
+ };
+
+ refreshRate = mkOption {
+ type = types.int;
+ default = 0;
+ example = 60;
+ description = ''
+ Screen refresh rate (0 = automatically detect).
+ '';
+ };
+
+ package = mkOption {
+ type = types.package;
+ default = pkgs.compton;
+ defaultText = "pkgs.compton";
+ example = literalExample "pkgs.compton";
+ description = ''
+ Compton derivation to use.
+ '';
+ };
+
+ extraOptions = mkOption {
+ type = types.str;
+ default = "";
+ example = ''
+ unredir-if-possible = true;
+ dbe = true;
+ '';
+ description = ''
+ Additional Compton configuration.
+ '';
};
};
- config = mkIf config.services.compton.enable {
+ config = mkIf cfg.enable {
+
+ home.packages = [ cfg.package ];
+
systemd.user.services.compton = {
Unit = {
Description = "Compton X11 compositor";
@@ -22,7 +214,9 @@ with lib;
};
Service = {
- ExecStart = "${pkgs.compton}/bin/compton";
+ ExecStart = "${cfg.package}/bin/compton --config ${configFile}";
+ Restart = "always";
+ RestartSec = 3;
};
};
};