{ config, pkgs, ... }:
{
  # https://github.com/danieldk/nix-home/blob/master/home/cfg/desktop.nix
  # https://github.com/Martins3/My-Linux-Config/blob/master/nixpkgs/home/app/gnome.nix

  # gsettings (or dconf-editor) schemas are spread throughout the nix store.
  # One can use a script to add them to $XDG_DATA_DIRS and then execute a command.
  # Here is an example script:
  # https://github.com/NixOS/nixpkgs/issues/33277#issuecomment-354689755

  # To add new config changes to NixOS:
  # - Dump current settings
  #     dconf dump / > dconf/$(date +%s).ini
  # - Change a setting, e.g. with dconf-editir
  # - Dump new settings
  #     dconf dump / > dconf/$(date +%s).ini
  # - Display changes
  #     diff --context=5 dconf/OLD-DATE.ini dconf/NEW-DATE.ini
  # - Add to `dconf.settings` below.

  # Restore settings:
  #   dconf load / < dconf/OLD-DATE.ini

  programs.dconf.enable = true;

  home-manager.users."yoda" = { osConfig, config, pkgs, lib, ... }: {
    home.file = {
      # Templates to create new Files with Nautilus.
      # It is also possible to group them by category
      # and to add zip files as templates for new folders:
      # https://www.reddit.com/r/gnome/comments/11tz0aw/comment/jclkzld/
      #
      # TODO:
      #   home-manager creates these files read-only.
      #   If a new file is created in GNOME files, then it will be read-only as well ...
      #   There is no `.mode = "0644"` option for the home.file.<name> module.
      "Templates/new".text = "";
      "Templates/new.md".text = "";
      "Templates/new.txt".text = "";
    };

    dconf.settings = {
      "org/gnome/desktop/media-handling" = {
        # Settings > Removable Media > Never promt or start apps on media insertion
        autorun-never = true;

        # Don't automount external drives.
        # https://unix.stackexchange.com/a/460299/315162
        automount = false;
        automount-open = false;
      };

      "org/gnome/settings-daemon/plugins/power" = {
        # Settings > Automatic Suspend > Plugged In
        sleep-inactive-ac-type = "nothing";
        # Settings > Automatic Suspend > On Battery Power
        sleep-inactive-battery-type = "suspend";
      };

      "org/gnome/settings-daemon/plugins/media-keys" = {
        # Settings > Keyboard > Keyboard Shortcuts > Launchers > Home folder
        home = ["<Super>e"];
      };

      "org/gnome/system/location" = {
        # Settings > Privacy > Location Services > Allow permitted apps to access location data
        enabled = true;
      };

      "org/gnome/desktop/privacy" = {
        # Settings > File History > Enabled
        remember-recent-files = true;
        # Settings > File History > File History Duration
        recent-files-max-age = 30;

        # Settings > Trash and Temporary Files > Automatically Delete Trash Content
        remove-old-trash-files = true;
        # Settings > Trash and Temporary Files > Automatically Delete Temporary Files
        remove-old-temp-files = true;
        # Settings > Trash and Temporary Files > Automatically Delete Period
        old-files-age = 30;
      };

      # Settings > Display > Night Light
      "org/gnome/settings-daemon/plugins/color" = {
        night-light-enabled = true;
        night-light-temperature = lib.hm.gvariant.mkUint32 3700;

        # Night light always on
        night-light-schedule-automatic = false;
        night-light-schedule-from = 2.0;
        night-light-schedule-to = 2.0;
      };

      # Epiphany (GNOME Web)
      "org/gnome/epiphany" = {
        ask-for-default = false;

        homepage-url = "https://www.startpage.com/";
        default-search-engine = "StartPage";

        # search-engine-providers = ...;
        # Could be helpful:
        #   https://github.com/matthewpi/nixos-config/blob/a6b7303f7a4a154d9d21a5ec25e725792214e3f2/users/matthew/desktop/gtk.nix#L154
        #   https://nix-community.github.io/home-manager/ -> hm.gvariant
        # Value:
        #   [{'url': <'https://duckduckgo.com/?q=%s&t=epiphany'>, 'bang': <'!ddg'>, 'name': <'DuckDuckGo'>}, {'url': <'https://www.example.com/search?q=%s'>, 'bang': <''>, 'name': <'New search engine'>}, {'url': <'https://www.startpage.com/sp/search?query=%s'>, 'bang': <'!sp'>, 'name': <'StartPage'>}]
      };

      "org/gnome/mutter" = {
        dynamic-workspaces = true;
        workspaces-only-on-primary = true;
      };

      "org/gnome/desktop/interface" = {
        # Theme
        # - When switching back to KDE to GNOME, this fixed a broken cursor theme.
        cursor-size = 24;
        cursor-theme = "Adwaita";
        gtk-theme = "Adwaita";
        icon-theme = "Adwaita";
        # Dark Style
        color-scheme = "prefer-dark";
        # Multitasking > General > Hot Corner
        enable-hot-corners = false;
        # Power > General > Show Battery Percentage
        show-battery-percentage = true;
      };

      "org/gnome/software" = {
        # GNOME Software > Preferences > Software Updates > Automatically check for and download updates
        download-updates = true;
      };
    };
  };
}