1{
2 config,
3 lib,
4 pkgs,
5 ...
6}: {
7 options.myHome.desktop.gnome = {
8 enable = lib.mkEnableOption "GNOME desktop environment";
9 };
10
11 config = lib.mkIf config.myHome.desktop.gnome.enable {
12 dconf = {
13 enable = true;
14
15 settings = let
16 defaultApps = {
17 terminal = config.myHome.profiles.defaultApps.terminal.exec or (lib.getExe pkgs.gnome-console);
18 webBrowser =
19 config.myHome.profiles.defaultApps.webBrowser.exec
20 or (lib.getExe config.programs.firefox.finalPackage);
21 fileManager = config.myHome.profiles.defaultApps.fileManager.exec or (lib.getExe pkgs.nautilus);
22 editor = config.myHome.profiles.defaultApps.editor.exec or (lib.getExe pkgs.gnome-text-editor);
23 archiveViewer = config.myHome.profiles.defaultApps.archiveViewer.exec or (lib.getExe pkgs.file-roller);
24 };
25 in {
26 "org/gnome/desktop/datetime".automatic-timezone = true;
27
28 "org/gnome/desktop/interface" = {
29 clock-format = "24h";
30 enable-hot-corners = false;
31 };
32
33 "org/gnome/desktop/peripherals/touchpad".tap-to-click = true;
34 "org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0" = {
35 binding = "<Super>Return";
36 command = "${defaultApps.terminal}${lib.optionalString (config.myHome.profiles.defaultApps.terminal.package == pkgs.ptyxis) " --new-window"}";
37 name = "Terminal";
38 };
39
40 "org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom1" = {
41 binding = "<Super>e";
42 command = "${defaultApps.fileManager}";
43 name = "File Manager";
44 };
45
46 "org/gnome/shell" = {
47 welcome-dialog-last-shown-version = "9999999999"; # No welcome dialog.
48 };
49
50 "org/gnome/shell/keybindings" = {
51 switch-to-application-1 = [];
52 switch-to-application-2 = [];
53 switch-to-application-3 = [];
54 switch-to-application-4 = [];
55 switch-to-application-5 = [];
56 switch-to-application-6 = [];
57 switch-to-application-7 = [];
58 switch-to-application-8 = [];
59 switch-to-application-9 = [];
60 switch-to-application-10 = [];
61 };
62
63 "org/gnome/system/location".enabled = false;
64
65 "org/gnome/desktop/wm/keybindings" = {
66 move-to-monitor-down = ["<Ctrl><Shift><Super>Down"];
67 move-to-monitor-left = ["<Ctrl><Shift><Super>Left"];
68 move-to-monitor-right = ["<Ctrl><Shift><Super>Right"];
69 move-to-monitor-up = ["<Ctrl><Shift><Super>Up"];
70 move-to-workspace-1 = ["<Shift><Super>1"];
71 move-to-workspace-10 = ["<Shift><Super>0"];
72 move-to-workspace-2 = ["<Shift><Super>2"];
73 move-to-workspace-3 = ["<Shift><Super>3"];
74 move-to-workspace-4 = ["<Shift><Super>4"];
75 move-to-workspace-5 = ["<Shift><Super>5"];
76 move-to-workspace-6 = ["<Shift><Super>6"];
77 move-to-workspace-7 = ["<Shift><Super>7"];
78 move-to-workspace-8 = ["<Shift><Super>8"];
79 move-to-workspace-9 = ["<Shift><Super>9"];
80 switch-to-workspace-1 = ["<Super>1"];
81 switch-to-workspace-10 = ["<Super>0"];
82 switch-to-workspace-2 = ["<Super>2"];
83 switch-to-workspace-3 = ["<Super>3"];
84 switch-to-workspace-4 = ["<Super>4"];
85 switch-to-workspace-5 = ["<Super>5"];
86 switch-to-workspace-6 = ["<Super>6"];
87 switch-to-workspace-7 = ["<Super>7"];
88 switch-to-workspace-8 = ["<Super>8"];
89 switch-to-workspace-9 = ["<Super>9"];
90 switch-to-workspace-down = [];
91 switch-to-workspace-left = ["<Ctrl><Super>Left"];
92 switch-to-workspace-right = ["<Ctrl><Super>Right"];
93 switch-to-workspace-up = [];
94 toggle-fullscreen = ["<Super>w"];
95 };
96
97 "org/gnome/desktop/wm/preferences".button-layout = "appmenu:close";
98 };
99 };
100
101 programs = {
102 firefox.nativeMessagingHosts = [pkgs.gnome-browser-connector];
103
104 gnome-shell = {
105 enable = true;
106
107 extensions = [
108 {package = pkgs.gnomeExtensions.appindicator;}
109 {package = pkgs.gnomeExtensions.night-theme-switcher;}
110 {package = pkgs.gnomeExtensions.gsconnect;}
111 {package = pkgs.gnomeExtensions.just-perfection;}
112 {package = pkgs.gnomeExtensions.caffeine;}
113 ];
114 };
115 };
116
117 home.packages = with pkgs; [
118 gnome-tweaks
119 adw-gtk3
120 gnome-extension-manager
121 morewaita-icon-theme
122 ];
123
124 myHome.profiles.defaultApps = {
125 archiveViewer = {
126 package = lib.mkDefault pkgs.file-roller;
127 icon = lib.mkDefault "org.gnome.FileRoller";
128 };
129 audioPlayer = {
130 package = lib.mkDefault config.programs.mpv.finalPackage;
131 icon = lib.mkDefault "mpv";
132 };
133 editor = {
134 package = lib.mkDefault pkgs.gnome-text-editor;
135 icon = lib.mkDefault "org.gnome.TextEditor";
136 };
137 fileManager = {
138 package = lib.mkDefault pkgs.nautilus;
139 icon = lib.mkDefault "org.gnome.Nautilus";
140 };
141 imageViewer = {
142 package = lib.mkDefault pkgs.loupe;
143 icon = lib.mkDefault "org.gnome.Loupe";
144 };
145 pdfViewer = {
146 package = lib.mkDefault pkgs.papers;
147 icon = lib.mkDefault "org.gnome.Papers";
148 };
149 terminal = {
150 package = lib.mkDefault pkgs.gnome-console;
151 icon = lib.mkDefault "org.gnome.Terminal";
152 };
153 videoPlayer = {
154 package = lib.mkDefault config.programs.mpv.finalPackage;
155 icon = lib.mkDefault "mpv";
156 };
157 };
158 };
159}