aboutsummaryrefslogtreecommitdiff
path: root/home-manager/modules/services/compton.nix
diff options
context:
space:
mode:
Diffstat (limited to 'home-manager/modules/services/compton.nix')
-rw-r--r--home-manager/modules/services/compton.nix320
1 files changed, 36 insertions, 284 deletions
diff --git a/home-manager/modules/services/compton.nix b/home-manager/modules/services/compton.nix
index c5b96af34da..0b8e7232b45 100644
--- a/home-manager/modules/services/compton.nix
+++ b/home-manager/modules/services/compton.nix
@@ -1,291 +1,43 @@
{ config, lib, pkgs, ... }:
-with lib;
-with builtins;
-
-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};
- no-dock-shadow = ${toJSON cfg.noDockShadow};
- no-dnd-shadow = ${toJSON cfg.noDNDShadow};
- '' + optionalString cfg.blur ''
-
- # blur
- blur-background = true;
- blur-background-exclude = ${toJSON cfg.blurExclude};
- '' + ''
-
- # opacity
- active-opacity = ${cfg.activeOpacity};
- inactive-opacity = ${cfg.inactiveOpacity};
- menu-opacity = ${cfg.menuOpacity};
- opacity-rule = ${toJSON cfg.opacityRule};
-
- # 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";
-
- blur = mkOption {
- type = types.bool;
- default = false;
- description = ''
- Enable background blur on transparent windows.
- '';
- };
-
- blurExclude = mkOption {
- type = types.listOf types.str;
- default = [ ];
- example = [ "class_g = 'slop'" "class_i = 'polybar'" ];
- description = ''
- List of windows to exclude background blur.
- See the
- <citerefentry>
- <refentrytitle>compton</refentrytitle>
- <manvolnum>1</manvolnum>
- </citerefentry>
- man page for more examples.
- '';
- };
-
- 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 the
- <citerefentry>
- <refentrytitle>compton</refentrytitle>
- <manvolnum>1</manvolnum>
- </citerefentry>
- 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 = ''
- Horizontal and vertical offsets 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 the
- <citerefentry>
- <refentrytitle>compton</refentrytitle>
- <manvolnum>1</manvolnum>
- </citerefentry>
- man page for more examples.
- '';
- };
-
- noDockShadow = mkOption {
- type = types.bool;
- default = true;
- description = ''
- Avoid shadow on docks.
- '';
- };
-
- noDNDShadow = mkOption {
- type = types.bool;
- default = true;
- description = ''
- Avoid shadow on drag-and-drop windows.
- '';
- };
-
- 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.
- '';
- };
-
- opacityRule = mkOption {
- type = types.listOf types.str;
- default = [ ];
- example = [ "87:class_i ?= 'scratchpad'" "91:class_i ?= 'xterm'" ];
- description = ''
- List of opacity rules.
- See the
- <citerefentry>
- <refentrytitle>compton</refentrytitle>
- <manvolnum>1</manvolnum>
- </citerefentry>
- man page for more examples.
- '';
- };
-
- 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 the
- <citerefentry>
- <refentrytitle>compton</refentrytitle>
- <manvolnum>1</manvolnum>
- </citerefentry>
- man page for 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 = literalExample "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.
- '';
- };
+with lib; {
+ imports = let
+ old = n: [ "services" "compton" n ];
+ new = n: [ "services" "picom" n ];
+ in [
+ (mkRenamedOptionModule (old "activeOpacity") (new "activeOpacity"))
+ (mkRenamedOptionModule (old "backend") (new "backend"))
+ (mkRenamedOptionModule (old "blur") (new "blur"))
+ (mkRenamedOptionModule (old "blurExclude") (new "blurExclude"))
+ (mkRenamedOptionModule (old "extraOptions") (new "extraOptions"))
+ (mkRenamedOptionModule (old "fade") (new "fade"))
+ (mkRenamedOptionModule (old "fadeDelta") (new "fadeDelta"))
+ (mkRenamedOptionModule (old "fadeExclude") (new "fadeExclude"))
+ (mkRenamedOptionModule (old "fadeSteps") (new "fadeSteps"))
+ (mkRenamedOptionModule (old "inactiveDim") (new "inactiveDim"))
+ (mkRenamedOptionModule (old "inactiveOpacity") (new "inactiveOpacity"))
+ (mkRenamedOptionModule (old "menuOpacity") (new "menuOpacity"))
+ (mkRenamedOptionModule (old "noDNDShadow") (new "noDNDShadow"))
+ (mkRenamedOptionModule (old "noDockShadow") (new "noDockShadow"))
+ (mkRenamedOptionModule (old "opacityRule") (new "opacityRule"))
+ (mkRenamedOptionModule (old "package") (new "package"))
+ (mkRenamedOptionModule (old "refreshRate") (new "refreshRate"))
+ (mkRenamedOptionModule (old "shadow") (new "shadow"))
+ (mkRenamedOptionModule (old "shadowExclude") (new "shadowExclude"))
+ (mkRenamedOptionModule (old "shadowOffsets") (new "shadowOffsets"))
+ (mkRenamedOptionModule (old "shadowOpacity") (new "shadowOpacity"))
+ (mkChangedOptionModule (old "vSync") (new "vSync") (v: v != "none"))
+ ];
+
+ options.services.compton.enable = mkEnableOption "Compton X11 compositor" // {
+ visible = false;
};
- config = mkIf cfg.enable {
- home.packages = [ cfg.package ];
-
- systemd.user.services.compton = {
- Unit = {
- Description = "Compton X11 compositor";
- After = [ "graphical-session-pre.target" ];
- PartOf = [ "graphical-session.target" ];
- };
-
- Install = { WantedBy = [ "graphical-session.target" ]; };
+ config = mkIf config.services.compton.enable {
+ warnings = [
+ "Obsolete option `services.compton.enable' is used. It was renamed to `services.picom.enable'."
+ ];
- Service = {
- ExecStart = "${cfg.package}/bin/compton --config ${configFile}";
- Restart = "always";
- RestartSec = 3;
- } // optionalAttrs (cfg.backend == "glx") {
- # Temporarily fixes corrupt colours with Mesa 18.
- Environment = [ "allow_rgb10_configs=false" ];
- };
- };
+ services.picom.enable = true;
};
}