summaryrefslogtreecommitdiffstats
path: root/usecases/desktop/graphical/gtk.nix
blob: 015149283a3f37bbe46160c68c9499de78bf384f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
inputs: {
  config,
  lib,
  pkgs,
  ...
}: let
  gtk3Colors = ./gtk-colors.scss;

  gtk3CssFile =
    pkgs.stdenv.mkDerivation ({
      name = "gtk3.css";

      src = pkgs.gtk3.src;

      nativeBuildInputs = with pkgs; [sassc];

      patchPhase = ''
        cp -f ${gtk3Colors} gtk/theme/Adwaita/_colors.scss
        substituteAllInPlace gtk/theme/Adwaita/_colors.scss
      '';

      dontConfigure = true;
      dontInstall = true;

      buildPhase = ''
        sassc -a -M -t expanded gtk/theme/Adwaita/gtk-contained-dark.scss $out
        # These lines contains includes of assets
        sed -i -e '/-gtk-icon/d' $out;
      '';
    }
    // config.theme.colors);

  gtk4NamedColors = with config.theme.colors; {
    # From the main CSS
    # -----------------

    # TODO: 2 and 4

    blue_1 = fadedBlue;
    blue_3 = neutralBlue;
    blue_5 = brightBlue;

    green_1 = fadedGreen;
    green_3 = neutralGreen;
    green_5 = brightGreen;

    yellow_1 = fadedYellow;
    yellow_3 = neutralYellow;
    yellow_5 = brightYellow;

    orange_1 = fadedOrange;
    orange_3 = neutralOrange;
    orange_5 = brightOrange;

    red_1 = fadedRed;
    red_3 = neutralRed;
    red_5 = brightRed;

    purple_1 = fadedMagenta;
    purple_3 = neutralMagenta;
    purple_5 = brightMagenta;

    # TODO: brown

    # From the dark theme CSS
    # -----------------------

    # TODO: bright dominant
    accent_color = "#8ec07c";
    destructive_color = neutralOrange;
    error_color = neutralOrange;

    warning_bg_color = neutralYellow;

    view_bg_color = background0;
    view_fg_color = foreground;

    window_bg_color = background1;
    window_fg_color = foreground;

    headerbar_bg_color = softBackground;
    headerbar_fg_color = foreground;

    dialog_bg_color = background2;
    dialog_fg_color = foreground;

    popover_bg_color = background2;
    popover_fg_color = foreground;
  };

  gtk4Css = lib.concatStringsSep "\n" (lib.mapAttrsToList
    (name: value: "@define-color ${name} ${value};")
    gtk4NamedColors);

  gtk4CssFile = pkgs.writeText "gtk4.css" gtk4Css;
in {
  home-manager.users.minijackson = {
    gtk = {
      enable = true;
      iconTheme = {
        # TODO: properly modify the colors
        package = pkgs.unstable.tela-circle-icon-theme.override {
          colorVariants = ["brown"];
        };
        name = "Tela-circle-brown-dark";
      };

      theme = {
        package = pkgs.gnome.gnome-themes-extra;
        name = "Adwaita-dark";
      };

      gtk3.extraConfig.gtk-application-prefer-dark-theme = true;
    };

    dconf.settings = {
      "org/gnome/desktop/interface" = {
        color-scheme = "prefer-dark";
      };
    };

    xdg.configFile = {
      "gtk-3.0/gtk.css".source = gtk3CssFile;
      "gtk-4.0/gtk.css".source = gtk4CssFile;
    };
  };
}