From 16b3844fadf26eab848add141ad6bd61bca4d6a5 Mon Sep 17 00:00:00 2001 From: Gabriel Arazas Date: Fri, 14 Feb 2025 15:03:05 +0800 Subject: [PATCH] home-manager/programs/sesh: init --- modules/home-manager/default.nix | 1 + modules/home-manager/programs/sesh.nix | 62 +++++++++++++++++++ tests/modules/home-manager/default.nix | 1 + .../home-manager/programs/sesh/basic.nix | 32 ++++++++++ .../home-manager/programs/sesh/default.nix | 4 ++ .../home-manager/programs/sesh/empty.nix | 11 ++++ 6 files changed, 111 insertions(+) create mode 100644 modules/home-manager/programs/sesh.nix create mode 100644 tests/modules/home-manager/programs/sesh/basic.nix create mode 100644 tests/modules/home-manager/programs/sesh/default.nix create mode 100644 tests/modules/home-manager/programs/sesh/empty.nix diff --git a/modules/home-manager/default.nix b/modules/home-manager/default.nix index 1cd16df4..df41bdfa 100644 --- a/modules/home-manager/default.nix +++ b/modules/home-manager/default.nix @@ -6,6 +6,7 @@ ./programs/borgmatic.nix ./programs/diceware.nix ./programs/nushell.nix + ./programs/sesh.nix ./programs/python.nix ./services/archivebox.nix ./services/borgbackup.nix diff --git a/modules/home-manager/programs/sesh.nix b/modules/home-manager/programs/sesh.nix new file mode 100644 index 00000000..e28e9da6 --- /dev/null +++ b/modules/home-manager/programs/sesh.nix @@ -0,0 +1,62 @@ +{ config, lib, pkgs, ... }: + +let + cfg = config.programs.sesh; + + settingsFormat = pkgs.formats.toml { }; +in +{ + # TODO: Add tmux integrations. + options.programs.sesh = { + enable = lib.mkEnableOption "sesh, a smart session manager"; + + package = lib.mkPackageOption pkgs "sesh" { }; + + settings = lib.mkOption { + type = settingsFormat.type; + default = { }; + description = '' + Program settings to be generated at + {file}`$XDG_CONFIG_HOME/sesh/sesh.toml`. + ''; + example = lib.literalExpression '' + { + default_session = { + startup_command = "nvim -c ':Telescope find_files'"; + preview_command = "eza --all --git --icons --color=always {}"; + }; + + session = [ + { + name = "Downloads"; + path = config.xdg.userDirs.downloads; + startup_command = "ls"; + } + + { + name = "tmux config"; + path = "~/c/dotfiles/tmux_config"; + startup_command = "nvim tmux.conf"; + preview_command = "bat --color=always ~/c/dotfiles/.config/tmux/tmux.conf"; + } + ]; + } + ''; + }; + }; + + config = lib.mkIf cfg.enable (lib.mkMerge [ + { + warnings = lib.optionals (!config.programs.zoxide.enable || !config.programs.fzf.enable) '' + You haven't enabled Zoxide nor fzf which is recommended to use alongside sesh. + ''; + + home.packages = [ cfg.package ]; + } + + (lib.mkIf (cfg.settings != { }) { + xdg.configFile."sesh/sesh.toml".source = + settingsFormat.generate "sesh-user-settings" cfg.settings; + }) + ]); +} diff --git a/tests/modules/home-manager/default.nix b/tests/modules/home-manager/default.nix index bbdc2676..c4c1c484 100644 --- a/tests/modules/home-manager/default.nix +++ b/tests/modules/home-manager/default.nix @@ -51,6 +51,7 @@ in import nmt { tests = builtins.foldl' (a: b: a // (import b)) { } ([ #./programs/borgmatic ./programs/diceware + ./programs/sesh ./programs/pipewire ./programs/pop-launcher ./programs/zed-editor diff --git a/tests/modules/home-manager/programs/sesh/basic.nix b/tests/modules/home-manager/programs/sesh/basic.nix new file mode 100644 index 00000000..af9efd08 --- /dev/null +++ b/tests/modules/home-manager/programs/sesh/basic.nix @@ -0,0 +1,32 @@ +{ config, lib, ... }: { + programs.sesh = { + enable = true; + settings = { + default_session = { + startup_command = "nvim -c ':Telescope find_files'"; + preview_command = "eza --all --git --icons --color=always {}"; + }; + + session = [ + { + name = "Downloads"; + path = config.xdg.userDirs.downloads; + startup_command = "ls"; + } + + { + name = "tmux config"; + path = "~/c/dotfiles/tmux_config"; + startup_command = "nvim tmux.conf"; + preview_command = "bat --color=always ~/c/dotfiles/.config/tmux/tmux.conf"; + } + ]; + }; + }; + + test.stubs.sesh = { }; + + nmt.script = '' + assertFileExists home-files/.config/sesh/sesh.toml + ''; +} diff --git a/tests/modules/home-manager/programs/sesh/default.nix b/tests/modules/home-manager/programs/sesh/default.nix new file mode 100644 index 00000000..94c1720f --- /dev/null +++ b/tests/modules/home-manager/programs/sesh/default.nix @@ -0,0 +1,4 @@ +{ + sesh-basic-settings = ./basic.nix; + sesh-empty-settings = ./empty.nix; +} diff --git a/tests/modules/home-manager/programs/sesh/empty.nix b/tests/modules/home-manager/programs/sesh/empty.nix new file mode 100644 index 00000000..e39a33ed --- /dev/null +++ b/tests/modules/home-manager/programs/sesh/empty.nix @@ -0,0 +1,11 @@ +{ ... }: + +{ + programs.diceware.enable = true; + + test.stubs.sesh = { }; + + nmt.script = '' + assertPathNotExists home-files/.config/diceware/diceware.ini + ''; +}