diff --git a/modules/home-manager/default.nix b/modules/home-manager/default.nix index 86deb19c..5e56d6f8 100644 --- a/modules/home-manager/default.nix +++ b/modules/home-manager/default.nix @@ -4,6 +4,7 @@ ./programs/neovide.nix ./programs/pipewire.nix ./programs/pop-launcher.nix + ./programs/zed-editor.nix ./services/archivebox.nix ./services/bleachbit.nix ./services/distant.nix diff --git a/modules/home-manager/programs/zed-editor.nix b/modules/home-manager/programs/zed-editor.nix new file mode 100644 index 00000000..2f08b1c5 --- /dev/null +++ b/modules/home-manager/programs/zed-editor.nix @@ -0,0 +1,36 @@ +{ config, lib, pkgs, ... }: + +let + cfg = config.programs.zed-editor; + + settingsFormat = pkgs.formats.json { }; +in +{ + options.programs.zed-editor = { + enable = lib.mkEnableOption "Zed, a text editor"; + + package = lib.mkPackageOption pkgs "zed-editor" { }; + + settings = lib.mkOption { + type = settingsFormat.type; + description = '' + Configuration settings to be put in {file}`$XDG_CONFIG_HOME/zed/settings.json`}. + ''; + default = { }; + example = { + "autosave" = "off"; + "confirm_quit" = true; + }; + }; + }; + + config = lib.mkIf cfg.enable (lib.mkMerge [ + { + home.packages = [ cfg.package ]; + } + + (lib.mkIf (cfg.settings != { }) { + xdg.configFile."zed/settings.json".source = settingsFormat.generate "zed-settings" cfg.settings; + }) + ]); +} diff --git a/tests/modules/home-manager/default.nix b/tests/modules/home-manager/default.nix index 3bc2f883..45567800 100644 --- a/tests/modules/home-manager/default.nix +++ b/tests/modules/home-manager/default.nix @@ -54,6 +54,7 @@ import nmt { ./programs/neovide ./programs/pipewire ./programs/pop-launcher + ./programs/zed-editor ] ++ lib.optionals isLinux [ ./services/archivebox diff --git a/tests/modules/home-manager/programs/zed-editor/basic.nix b/tests/modules/home-manager/programs/zed-editor/basic.nix new file mode 100644 index 00000000..8d9c8a25 --- /dev/null +++ b/tests/modules/home-manager/programs/zed-editor/basic.nix @@ -0,0 +1,15 @@ +{ config, lib, ... }: { + programs.zed-editor = { + enable = true; + settings = { + autosave = "off"; + confirm_quit = true; + }; + }; + + test.stubs.zed-editor = { }; + + nmt.script = '' + assertFileExists home-files/.config/zed/settings.json + ''; +} diff --git a/tests/modules/home-manager/programs/zed-editor/default.nix b/tests/modules/home-manager/programs/zed-editor/default.nix new file mode 100644 index 00000000..698edeca --- /dev/null +++ b/tests/modules/home-manager/programs/zed-editor/default.nix @@ -0,0 +1,4 @@ +{ + zed-basic-settings = ./basic.nix; + zed-empty-settings = ./empty.nix; +} diff --git a/tests/modules/home-manager/programs/zed-editor/empty.nix b/tests/modules/home-manager/programs/zed-editor/empty.nix new file mode 100644 index 00000000..7d50d197 --- /dev/null +++ b/tests/modules/home-manager/programs/zed-editor/empty.nix @@ -0,0 +1,11 @@ +{ ... }: + +{ + programs.zed-editor.enable = true; + + test.stubs.zed-editor = { }; + + nmt.script = '' + assertPathNotExists home-files/.config/zed/settings.json + ''; +}