diff --git a/modules/programs/aliae.nix b/modules/programs/aliae.nix new file mode 100644 index 000000000..ba351b243 --- /dev/null +++ b/modules/programs/aliae.nix @@ -0,0 +1,77 @@ +{ + lib, + pkgs, + config, + ... +}: +let + inherit (lib) + mkIf + mkEnableOption + mkPackageOption + mkOption + ; + + inherit (lib.hm.shell) + mkBashIntegrationOption + mkZshIntegrationOption + mkFishIntegrationOption + mkNushellIntegrationOption + ; + + cfg = config.programs.aliae; + yamlFormat = pkgs.formats.yaml { }; +in +{ + meta.maintainers = with lib.hm.maintainers; [ aguirre-matteo ]; + options.programs.aliae = { + enable = mkEnableOption "aliae"; + package = mkPackageOption pkgs "aliae" { nullable = true; }; + enableBashIntegration = mkBashIntegrationOption { inherit config; }; + enableZshIntegration = mkZshIntegrationOption { inherit config; }; + enableFishIntegration = mkFishIntegrationOption { inherit config; }; + enableNushellIntegration = mkNushellIntegrationOption { inherit config; }; + settings = mkOption { + inherit (yamlFormat) type; + default = { }; + example = { + alias = [ + { + name = "a"; + value = "aliae"; + } + { + name = "hello-world"; + value = ''echo "hello world"''; + type = "function"; + } + ]; + + env = [ + { + name = "EDITOR"; + value = "code-insiders --wait"; + } + ]; + }; + description = '' + Configuration settings for aliae. All the available options can be found here: + . + ''; + }; + }; + + config = mkIf cfg.enable { + home.packages = mkIf (cfg.package != null) [ cfg.package ]; + home.file.".aliae.yaml" = mkIf (cfg.settings != { }) { + source = yamlFormat.generate "aliae.yaml" cfg.settings; + }; + programs.bash.initExtra = mkIf cfg.enableBashIntegration ''eval "$(aliae init bash)"''; + programs.zsh.initContent = mkIf cfg.enableZshIntegration ''eval "$(aliae init zsh)"''; + programs.fish.interactiveShellInit = mkIf cfg.enableFishIntegration "aliae init fish | source"; + programs.nushell = mkIf cfg.enableNushellIntegration { + extraConfig = "source ~/.aliae.nu"; + extraEnv = "aliae init nu"; + }; + }; +} diff --git a/tests/modules/programs/aliae/aliae.yaml b/tests/modules/programs/aliae/aliae.yaml new file mode 100644 index 000000000..597388d67 --- /dev/null +++ b/tests/modules/programs/aliae/aliae.yaml @@ -0,0 +1,9 @@ +alias: +- name: a + value: aliae +- name: hello-world + type: function + value: echo "hello world" +env: +- name: EDITOR + value: code-insiders --wait diff --git a/tests/modules/programs/aliae/default.nix b/tests/modules/programs/aliae/default.nix new file mode 100644 index 000000000..c937f12ef --- /dev/null +++ b/tests/modules/programs/aliae/default.nix @@ -0,0 +1 @@ +{ aliae-settings = ./settings.nix; } diff --git a/tests/modules/programs/aliae/settings.nix b/tests/modules/programs/aliae/settings.nix new file mode 100644 index 000000000..72bad6123 --- /dev/null +++ b/tests/modules/programs/aliae/settings.nix @@ -0,0 +1,30 @@ +{ + programs.aliae = { + enable = true; + settings = { + alias = [ + { + name = "a"; + value = "aliae"; + } + { + name = "hello-world"; + value = ''echo "hello world"''; + type = "function"; + } + ]; + + env = [ + { + name = "EDITOR"; + value = "code-insiders --wait"; + } + ]; + }; + }; + + nmt.script = '' + assertFileExists home-files/.aliae.yaml + assertFileContent home-files/.aliae.yaml ${./aliae.yaml} + ''; +}