diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS
index c0d30b53707e..8e77d7b3cd68 100644
--- a/.github/CODEOWNERS
+++ b/.github/CODEOWNERS
@@ -72,6 +72,9 @@
/modules/programs/firefox.nix @rycee
+/modules/programs/flavours.nix @misterio77
+/tests/modules/programs/flavours @misterio77
+
/modules/programs/foot.nix @plabadens
/tests/modules/programs/foot @plabadens
diff --git a/home-manager/default.nix b/home-manager/default.nix
index ecdea9e7bd5c..5ab755cfe205 100644
--- a/home-manager/default.nix
+++ b/home-manager/default.nix
@@ -11,8 +11,8 @@ let
pathStr = if path == null then "" else path;
- nixos-option =
- callPackage (pkgs.path + "/nixos/modules/installer/tools/nixos-option") { };
+ nixos-option = pkgs.nixos-option or (callPackage
+ (pkgs.path + "/nixos/modules/installer/tools/nixos-option") { });
in runCommand "home-manager" {
preferLocalBuild = true;
diff --git a/modules/lib/maintainers.nix b/modules/lib/maintainers.nix
index d091b28a462d..f33f5935c494 100644
--- a/modules/lib/maintainers.nix
+++ b/modules/lib/maintainers.nix
@@ -115,4 +115,14 @@
githubId = 56614642;
name = "Ilan Joselevich";
};
+ misterio77 = {
+ email = "eu@misterio.me";
+ github = "Misterio77";
+ githubId = 5727578;
+ name = "Gabriel Fontes";
+ keys = [{
+ longkeyid = "rsa3072/0x245CAB70B4C225E9";
+ fingerprint = "7088 C742 1873 E0DB 97FF 17C2 245C AB70 B4C2 25E9";
+ }];
+ };
}
diff --git a/modules/misc/news.nix b/modules/misc/news.nix
index 6e88b6246673..7eaafcb066c3 100644
--- a/modules/misc/news.nix
+++ b/modules/misc/news.nix
@@ -2118,6 +2118,13 @@ in
A new module is available: 'programs.himalaya'.
'';
}
+
+ {
+ time = "2021-07-07T00:58:43+00:00";
+ message = ''
+ A new module is available: 'programs.flavours'.
+ '';
+ }
];
};
}
diff --git a/modules/modules.nix b/modules/modules.nix
index 3609f8feb9eb..cefa47ac91bf 100644
--- a/modules/modules.nix
+++ b/modules/modules.nix
@@ -70,6 +70,7 @@ let
(loadModule ./programs/feh.nix { })
(loadModule ./programs/firefox.nix { })
(loadModule ./programs/fish.nix { })
+ (loadModule ./programs/flavours.nix { })
(loadModule ./programs/foot.nix { condition = hostPlatform.isLinux; })
(loadModule ./programs/fzf.nix { })
(loadModule ./programs/getmail.nix { condition = hostPlatform.isLinux; })
diff --git a/modules/programs/flavours.nix b/modules/programs/flavours.nix
new file mode 100644
index 000000000000..8fbb1725061b
--- /dev/null
+++ b/modules/programs/flavours.nix
@@ -0,0 +1,64 @@
+{ config, lib, pkgs, ... }:
+
+with lib;
+
+let
+
+ cfg = config.programs.flavours;
+
+ tomlFormat = pkgs.formats.toml { };
+
+in {
+ meta.maintainers = [ maintainers.misterio77 ];
+
+ options.programs.flavours = {
+ enable = mkEnableOption "Flavours, a base16 manager";
+
+ package = mkOption {
+ type = types.package;
+ default = pkgs.flavours;
+ defaultText = literalExample "pkgs.flavours";
+ description = "The package to use for the flavours binary.";
+ };
+
+ settings = mkOption {
+ type = tomlFormat.type;
+ default = { };
+ defaultText = literalExample "{ }";
+ example = literalExample ''
+ {
+ shell = "bash -c '{}'";
+ item = [
+ {
+ file = "~/.config/alacritty/colors.yml";
+ template = "alacritty";
+ subtemplate = "default-256";
+ rewrite = true;
+ }
+ {
+ file = "~/.config/sway/colors";
+ template = "sway";
+ subtemplate = "colors";
+ hook = "swaymsg reload";
+ rewrite = true;
+ }
+ ];
+ }
+ '';
+ description = ''
+ Configuration written to
+ $XDG_CONFIG_HOME/flavours/config.toml.
+
+ See for all options
+ and some examples.
+ '';
+ };
+ };
+
+ config = mkIf cfg.enable {
+ home.packages = [ cfg.package ];
+ xdg.configFile."flavours/config.toml" = mkIf (cfg.settings != { }) {
+ source = tomlFormat.generate "flavours-config" cfg.settings;
+ };
+ };
+}
diff --git a/modules/programs/qutebrowser.nix b/modules/programs/qutebrowser.nix
index 8d4868fbb57f..2178997fe32c 100644
--- a/modules/programs/qutebrowser.nix
+++ b/modules/programs/qutebrowser.nix
@@ -306,7 +306,25 @@ in {
};
xdg.configFile."qutebrowser/config.py" =
- mkIf pkgs.stdenv.hostPlatform.isLinux { text = qutebrowserConfig; };
+ mkIf pkgs.stdenv.hostPlatform.isLinux {
+ text = qutebrowserConfig;
+ onChange = ''
+ hash="$(echo -n $USER | md5sum | cut -d' ' -f1)"
+ socket="''${XDG_RUNTIME_DIR:-/run/user/$UID}/qutebrowser/ipc-$hash"
+ if [ -S $socket ]; then
+ echo "Reloading qutebrowser"
+ command=${
+ escapeShellArg (builtins.toJSON {
+ args = [ ":config-source" ];
+ target_arg = null;
+ protocol_version = 1;
+ })
+ }
+ $DRY_RUN_CMD echo $command | ${pkgs.socat}/bin/socat -lf /dev/null - UNIX-CONNECT:$socket
+ fi
+ unset hash socket command
+ '';
+ };
xdg.configFile."qutebrowser/quickmarks" =
mkIf (cfg.quickmarks != { } && pkgs.stdenv.hostPlatform.isLinux) {
diff --git a/tests/default.nix b/tests/default.nix
index b5f697238b02..9722fb6ac865 100644
--- a/tests/default.nix
+++ b/tests/default.nix
@@ -50,6 +50,7 @@ import nmt {
./modules/programs/direnv
./modules/programs/feh
./modules/programs/fish
+ ./modules/programs/flavours
./modules/programs/gh
./modules/programs/git
./modules/programs/gpg
diff --git a/tests/modules/programs/flavours/default.nix b/tests/modules/programs/flavours/default.nix
new file mode 100644
index 000000000000..430c973a64c9
--- /dev/null
+++ b/tests/modules/programs/flavours/default.nix
@@ -0,0 +1 @@
+{ flavours-settings = ./settings.nix; }
diff --git a/tests/modules/programs/flavours/settings-expected.toml b/tests/modules/programs/flavours/settings-expected.toml
new file mode 100644
index 000000000000..5704d307bce6
--- /dev/null
+++ b/tests/modules/programs/flavours/settings-expected.toml
@@ -0,0 +1,19 @@
+shell = "bash -c '{}'"
+[[item]]
+file = "~/.config/sway/config"
+hook = "swaymsg reload"
+light = false
+subtemplate = "colors"
+template = "sway"
+
+[[item]]
+file = "~/.config/waybar/colors.css"
+rewrite = true
+template = "waybar"
+
+[[item]]
+end = "/* End Flavours */"
+file = "~/.config/beautifuldiscord/style.css"
+start = "/* Start Flavours */"
+subtemplate = "css-variables"
+template = "styles"
diff --git a/tests/modules/programs/flavours/settings.nix b/tests/modules/programs/flavours/settings.nix
new file mode 100644
index 000000000000..5664bb2d3fad
--- /dev/null
+++ b/tests/modules/programs/flavours/settings.nix
@@ -0,0 +1,46 @@
+{ config, lib, pkgs, ... }:
+
+with lib;
+
+{
+ config = {
+ programs.flavours = {
+ enable = true;
+
+ settings = {
+ shell = "bash -c '{}'";
+ item = [
+ {
+ file = "~/.config/sway/config";
+ template = "sway";
+ subtemplate = "colors";
+ hook = "swaymsg reload";
+ light = false;
+ }
+ {
+ file = "~/.config/waybar/colors.css";
+ template = "waybar";
+ rewrite = true;
+ }
+ {
+ file = "~/.config/beautifuldiscord/style.css";
+ template = "styles";
+ subtemplate = "css-variables";
+ start = "/* Start Flavours */";
+ end = "/* End Flavours */";
+ }
+ ];
+ };
+ };
+
+ nixpkgs.overlays = [
+ (self: super: { flavours = pkgs.writeScriptBin "dummy-flavours" ""; })
+ ];
+
+ nmt.script = ''
+ assertFileContent \
+ home-files/.config/flavours/config.toml \
+ ${./settings-expected.toml}
+ '';
+ };
+}
diff --git a/tests/modules/programs/xmobar/basic-configuration.nix b/tests/modules/programs/xmobar/basic-configuration.nix
index 360cc4c3dc32..99ed57de18d7 100644
--- a/tests/modules/programs/xmobar/basic-configuration.nix
+++ b/tests/modules/programs/xmobar/basic-configuration.nix
@@ -6,6 +6,7 @@ with lib;
config = {
programs.xmobar = {
enable = true;
+ package = pkgs.writeScriptBin "dummy" "";
extraConfig = ''
Config
{ font = "Fira Code"