Light Mode

Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

nix-community/dconf2nix

Repository files navigation

dconf2nix

A convenient converter of dconf files to Nix, as expected by Home Manager's dconf settings. So you can Nixify your GNOME Shell configuration

  • Benchmarks
  • Introduction
  • Run
    • Custom root
  • Supported types
  • GNOME Shell configuration
  • Installation
  • Troubleshooting
  • Development

Benchmarks

Take it with a grain of salt but on my machine it takes an average of 7.1ms to process a 349 lines configuration and generate a Nix file with 433 lines.

Introduction

Given the following dconf settings:

[org/gnome/desktop/peripherals/mouse]
natural-scroll=false
speed=-0.5

[org/gnome/desktop/peripherals/touchpad]
tap-to-click=false
two-finger-scrolling-enabled=true

[org/gnome/desktop/input-sources]
current=uint32 0
sources=[('xkb', 'us')]
xkb-options=['terminate:ctrl_alt_bksp', 'lv3:ralt_switch', 'caps:ctrl_modifier']

[org/gnome/desktop/screensaver]
picture-uri='file:///home/gvolpe/Pictures/nixos.png'

You will get the following output when running dconf2nix:

{ lib, ... }:

with lib.hm.gvariant;
{
dconf.settings = {
"org/gnome/desktop/peripherals/mouse" = {
natural-scroll = false;
speed = -0.5;
};

"org/gnome/desktop/peripherals/touchpad" = {
tap-to-click = false;
two-finger-scrolling-enabled = true;
};

"org/gnome/desktop/input-sources" = {
current = mkUint32 0;
sources = [ (mkTuple [ "xkb" "us" ]) ];
xkb-options = [ "terminate:ctrl_alt_bksp" "lv3:ralt_switch" "caps:ctrl_modifier" ];
};

"org/gnome/desktop/screensaver" = {
picture-uri = "file:///home/gvolpe/Pictures/nixos.png";
};
};

}

It makes use of the Home Manager's dconf.settings key.

You can make changes in the UI and create a dump of your dconf file at any time, which you can Nixify so Home Manager can restore the next time you run home-manager switch. To create a dump, run the following command:

dconf dump / > dconf.settings

Run

The easiest way is to pipe the standard input to dconf2nix and expect the result in the standard output:

dconf dump / | dconf2nix > dconf.nix

If you have an input file instead, you can run the following command:

dconf2nix -i data/dconf.settings -o output/dconf.nix

Type --help for some more information.

dconf2nix - Nixify dconf configuration files

Usage: dconf2nix [-v|--version] [-r|--root ARG] [--verbose]
[(-i|--input ARG) (-o|--output ARG)]

Convert a dconf file into a Nix file, as expected by Home Manager.

Available options:
-h,--help Show this help text
-v,--version Show the current version
-r,--root ARG Custom root path. e.g.: system/locale/
--verbose Verbose mode (debug)
-i,--input ARG Path to the dconf file (input)
-o,--output ARG Path to the Nix output file (to be created)

Custom root

By default, dconf2nix expects the root to be /. If you want to create a dump of a custom root, you can use the --root flag. For example:

dconf dump /system/locale/ | dconf2nix --root system/locale > dconf.nix

This will generate an output similar to the one below.

{
dconf.settings = {
"system/locale" = {
region = "en_US.UTF-8";
};

};
}

Supported types

With some minor spots (e.g. hexadecimal floats), the complete GVariant text format is supported. But because Nix and GVariant data models are quite different, the Nix format can be a bit verbose, relying on constructor functions.

GNOME Shell configuration

Once you have your dconf.nix, you can import it via Home Manager.

{
programs.home-manager.enable = true;

imports = [
./dconf.nix
];
}

If you are using the Home Manager module for NixOS you can import it like so:

{
home-manager.users.joe = { pkgs, ... }: {
imports = [ ./dconf.nix ];
# ...
};
}

Installation

dconf2nix is available in Nixpkgs and can be installed as any other package. It can also be used without installing. For example, with flakes.

$ nix run nixpkgs#dconf2nix -- --version
<<< DCONF2NIX >>>
Version: 0.0.12
Maintainers: Nix Community
Source code: https://github.com/nix-commmunity/dconf2nix

To build it from source, it is recommend to use Cachix to reduce the compilation time.

Have a look at the latest releases for more information.

Troubleshooting

Do consider the caveats mentioned above in the Supported Types section.

Development

To compile and run the tests locally.

cabal new-configure
cabal new-run dconf2nix-tests

To generate the static binary.

cabal new-configure --disable-executable-dynamic --ghc-option=-optl=-static --ghc-option=-optl=-pthread
nix-build

If everything goes well, the binary should be under result/bin/.

About

Convert dconf files (e.g. GNOME Shell) to Nix, as expected by Home Manager [maintainer=@jtojnar]

Topics

Resources

Readme

License

Apache-2.0 license

Code of conduct

Code of conduct

Security policy

Security policy

Stars

Watchers

Forks

Sponsor this project

Contributors