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"