mirror of
https://codeberg.org/muon/home.git
synced 2026-07-03 23:49:35 +00:00
Add worktrunk shell integration
This commit is contained in:
parent
55adebb809
commit
0829385802
3 changed files with 110 additions and 4 deletions
|
|
@ -17,6 +17,7 @@
|
|||
./zellij
|
||||
./opencode
|
||||
./gh.nix
|
||||
./worktrunk.nix
|
||||
];
|
||||
|
||||
config = lib.mkIf osConfig.mods.desktop.enable {
|
||||
|
|
|
|||
|
|
@ -26,13 +26,15 @@ in {
|
|||
enableNushellIntegration = lib.mkIf config.mods.terminal.nushell.enable true;
|
||||
};
|
||||
|
||||
programs.worktrunk = {
|
||||
enable = true;
|
||||
enableZshIntegration = lib.mkIf config.mods.terminal.zsh.enable true;
|
||||
enableNushellIntegration = lib.mkIf config.mods.terminal.nushell.enable true;
|
||||
};
|
||||
|
||||
home.sessionVariables.EDITOR = "nvim";
|
||||
programs.zsh.sessionVariables = lib.mkIf config.mods.terminal.zsh.enable {
|
||||
EDITOR = "nvim";
|
||||
};
|
||||
|
||||
home.packages = with pkgs; [
|
||||
worktrunk
|
||||
];
|
||||
};
|
||||
}
|
||||
|
|
|
|||
103
modules/home/terminal/worktrunk.nix
Normal file
103
modules/home/terminal/worktrunk.nix
Normal file
|
|
@ -0,0 +1,103 @@
|
|||
{
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
...
|
||||
}: let
|
||||
inherit (lib) mkIf types;
|
||||
|
||||
cfg = config.programs.worktrunk;
|
||||
in {
|
||||
options.programs.worktrunk = {
|
||||
enable = lib.mkEnableOption "worktrunk, a CLI tool for managing work sessions";
|
||||
|
||||
package = lib.mkPackageOption pkgs "worktrunk" {nullable = true;};
|
||||
|
||||
enableBashIntegration = lib.hm.shell.mkBashIntegrationOption {inherit config;};
|
||||
|
||||
enableFishIntegration = lib.hm.shell.mkFishIntegrationOption {inherit config;};
|
||||
|
||||
enableNushellIntegration = lib.hm.shell.mkNushellIntegrationOption {inherit config;};
|
||||
|
||||
enableZshIntegration = lib.hm.shell.mkZshIntegrationOption {inherit config;};
|
||||
|
||||
shellWrapperName = lib.mkOption {
|
||||
type = types.str;
|
||||
default = "wt";
|
||||
example = "wt";
|
||||
description = ''
|
||||
Name of the shell wrapper to be called.
|
||||
'';
|
||||
};
|
||||
};
|
||||
|
||||
config = mkIf cfg.enable {
|
||||
home.packages = mkIf (cfg.package != null) [cfg.package];
|
||||
|
||||
programs = let
|
||||
bashIntegration = ''
|
||||
${cfg.shellWrapperName}() {
|
||||
local directive_file=$(mktemp)
|
||||
WORKTRUNK_DIRECTIVE_FILE="$directive_file" command ${
|
||||
if cfg.shellWrapperName != "wt"
|
||||
then "wt"
|
||||
else "\${WORKTRUNK_BIN:-wt}"
|
||||
} "$@"
|
||||
if [[ -s "$directive_file" ]]; then
|
||||
source "$directive_file"
|
||||
fi
|
||||
rm -f "$directive_file"
|
||||
}
|
||||
'';
|
||||
|
||||
fishIntegration = ''
|
||||
set -l directive_file (mktemp)
|
||||
${
|
||||
if cfg.shellWrapperName != "wt"
|
||||
then ''
|
||||
env WORKTRUNK_DIRECTIVE_FILE=$directive_file wt $argv''
|
||||
else ''
|
||||
set -q WORKTRUNK_BIN; or set -l WORKTRUNK_BIN wt
|
||||
env WORKTRUNK_DIRECTIVE_FILE=$directive_file $WORKTRUNK_BIN $argv''
|
||||
}
|
||||
if test -s "$directive_file"
|
||||
set -l directive (string collect < "$directive_file")
|
||||
eval $directive
|
||||
end
|
||||
command rm -f "$directive_file"
|
||||
'';
|
||||
|
||||
nushellIntegration = ''
|
||||
def --env --wrapped ${cfg.shellWrapperName} [...args] {
|
||||
let directive_file = (mktemp --tmpdir)
|
||||
let worktrunk_bin = (${
|
||||
if cfg.shellWrapperName != "wt"
|
||||
then "'wt'"
|
||||
else "$env.WORKTRUNK_BIN? | default 'wt'"
|
||||
})
|
||||
with-env { WORKTRUNK_DIRECTIVE_FILE: $directive_file } {
|
||||
^$worktrunk_bin ...$args
|
||||
}
|
||||
if ($directive_file | path exists) {
|
||||
let directives = open $directive_file --raw | str trim | lines
|
||||
for directive in $directives {
|
||||
if ($directive | str starts-with "cd '") {
|
||||
let target_dir = $directive | str substring 4..-2
|
||||
cd $target_dir
|
||||
}
|
||||
}
|
||||
}
|
||||
rm -f $directive_file
|
||||
}
|
||||
'';
|
||||
in {
|
||||
bash.initExtra = mkIf cfg.enableBashIntegration bashIntegration;
|
||||
|
||||
zsh.initContent = mkIf cfg.enableZshIntegration bashIntegration;
|
||||
|
||||
fish.functions.${cfg.shellWrapperName} = mkIf cfg.enableFishIntegration fishIntegration;
|
||||
|
||||
nushell.extraConfig = mkIf cfg.enableNushellIntegration nushellIntegration;
|
||||
};
|
||||
};
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue