diff --git a/modules/lib/maintainers.nix b/modules/lib/maintainers.nix index 05cb685b2..b6a290bcd 100644 --- a/modules/lib/maintainers.nix +++ b/modules/lib/maintainers.nix @@ -672,6 +672,12 @@ github = "zorrobert"; githubId = 118135271; }; + Kyure-A = { + name = "Kyure_A"; + email = "k@kyre.moe"; + github = "Kyure-A"; + githubId = 49436968; + }; joygnu = { name = "joygnu"; email = "contact@joygnu.org"; diff --git a/modules/modules.nix b/modules/modules.nix index bf2795b8a..49ffd8fd2 100644 --- a/modules/modules.nix +++ b/modules/modules.nix @@ -239,6 +239,7 @@ let ./programs/senpai.nix ./programs/sesh.nix ./programs/sftpman.nix + ./programs/sheldon.nix ./programs/sioyek.nix ./programs/skim.nix ./programs/sm64ex.nix diff --git a/modules/programs/sheldon.nix b/modules/programs/sheldon.nix new file mode 100644 index 000000000..5b67928c8 --- /dev/null +++ b/modules/programs/sheldon.nix @@ -0,0 +1,82 @@ +{ config, lib, pkgs, ... }: + +with lib; + +let + cfg = config.programs.sheldon; + tomlFormat = pkgs.formats.toml { }; + sheldonCmd = "${config.home.profileDirectory}/bin/sheldon"; +in { + meta.maintainers = with maintainers; [ Kyure-A mainrs ]; + + options.programs.sheldon = { + enable = mkEnableOption "sheldon"; + + package = mkOption { + type = types.package; + default = pkgs.sheldon; + defaultText = literalExpression "pkgs.sheldon"; + description = "The package to use for the sheldon binary."; + }; + + settings = mkOption { + inherit (tomlFormat) type; + default = { }; + description = ""; + example = literalExpression ""; + }; + + enableZshCompletions = mkEnableOption "Zsh completions" // { + default = true; + }; + + enableBashCompletions = mkEnableOption "Bash completions" // { + default = true; + }; + + enableFishCompletions = mkEnableOption "Fish completions" // { + default = true; + }; + }; + + config = mkIf cfg.enable { + home.packages = [ cfg.package ]; + + xdg.configFile."sheldon/plugins.toml" = mkIf (cfg.settings != { }) { + source = tomlFormat.generate "sheldon-config" cfg.settings; + }; + + programs.bash.initExtra = '' + ${optionalString (cfg.settings != { }) '' + eval "$(sheldon source)" + ''} + ${optionalString cfg.enableBashCompletions '' + if [[ $TERM != "dumb" ]]; then + eval "$(${sheldonCmd} completions --shell=bash)" + fi + ''} + ''; + + programs.zsh.initExtra = '' + ${optionalString (cfg.settings != { }) '' + eval "$(sheldon source)" + ''} + ${optionalString cfg.enableZshCompletions '' + if [[ $TERM != "dumb" ]]; then + eval "$(${sheldonCmd} completions --shell=zsh)" + fi + ''} + ''; + + programs.fish.interactiveShellInit = '' + ${optionalString (cfg.settings != { }) '' + eval "$(sheldon source)" + ''} + ${optionalString cfg.enableFishCompletions '' + if test "$TERM" != "dumb" + eval "$(${sheldonCmd} completions --shell=fish)" + end + ''} + ''; + }; +} diff --git a/tests/default.nix b/tests/default.nix index a7d561695..6f22ca7ef 100644 --- a/tests/default.nix +++ b/tests/default.nix @@ -388,6 +388,7 @@ in import nmtSrc { ./modules/programs/senpai ./modules/programs/sesh ./modules/programs/sftpman + ./modules/programs/sheldon ./modules/programs/sioyek ./modules/programs/sm64ex ./modules/programs/spotify-player diff --git a/tests/modules/programs/sheldon/default.nix b/tests/modules/programs/sheldon/default.nix new file mode 100644 index 000000000..eba78f424 --- /dev/null +++ b/tests/modules/programs/sheldon/default.nix @@ -0,0 +1,27 @@ +{ + config = { + programs.sheldon = { + enable = true; + settings = { + shell = "zsh"; + plugins = { + zsh-syntax-highlighting = { + github = "zsh-users/zsh-syntax-highlighting"; + apply = [ "defer" ]; + }; + }; + templates = { + defer = '' + {{ hooks | get: "pre" | nl }}{% for file in files %}zsh-defer source "{{ file }}" + {% endfor %}{{ hooks | get: "post" | nl }}''; + }; + }; + }; + }; + + test.stubs.sheldon = { }; + + nmt.script = "assertFileContent home-files/.config/sheldon/plugins.toml ${ + ./plugins.toml + }"; +} diff --git a/tests/modules/programs/sheldon/plugins.toml b/tests/modules/programs/sheldon/plugins.toml new file mode 100644 index 000000000..f40b27cf2 --- /dev/null +++ b/tests/modules/programs/sheldon/plugins.toml @@ -0,0 +1,7 @@ +shell = "zsh" +[plugins.zsh-syntax-highlighting] +apply = ["defer"] +github = "zsh-users/zsh-syntax-highlighting" + +[templates] +defer = "{{ hooks | get: \"pre\" | nl }}{% for file in files %}zsh-defer source \"{{ file }}\"\n{% endfor %}{{ hooks | get: \"post\" | nl }}"