1
0
Fork 0
mirror of https://github.com/nix-community/home-manager.git synced 2025-11-08 19:46:05 +01:00

fabric: add module

This commit is contained in:
Aguirre Matteo 2025-09-20 15:04:27 -03:00 committed by Austin Horstman
parent f3ff73a5e1
commit 61c84a3bbf
5 changed files with 176 additions and 0 deletions

View file

@ -0,0 +1,72 @@
{
lib,
pkgs,
config,
...
}:
let
inherit (lib)
mkIf
mkEnableOption
mkPackageOption
;
inherit (lib.hm.shell)
mkBashIntegrationOption
mkZshIntegrationOption
;
cfg = config.programs.fabric-ai;
in
{
meta.maintainers = with lib.hm.maintainers; [ aguirre-matteo ];
options.programs.fabric-ai = {
enable = mkEnableOption "Fabric AI";
package = mkPackageOption pkgs "fabric-ai" { nullable = true; };
enablePatternsAliases = mkEnableOption "aliases for all Fabric's patterns";
enableYtAlias = mkEnableOption "Fabric's `yt` alias" // {
default = true;
};
enableBashIntegration = mkBashIntegrationOption { inherit config; };
enableZshIntegration = mkZshIntegrationOption { inherit config; };
};
config =
let
posixShellCode = ''
${lib.optionalString cfg.enablePatternsAliases ''
for pattern_file in $HOME/.config/fabric/patterns/*; do
pattern_name="$(basename "$pattern_file")"
alias_name="''${FABRIC_ALIAS_PREFIX:-}''${pattern_name}"
alias_command="alias $alias_name='fabric --pattern $pattern_name'"
eval "$alias_command"
done
''}
${lib.optionalString cfg.enableYtAlias ''
yt() {
if [ "$#" -eq 0 ] || [ "$#" -gt 2 ]; then
echo "Usage: yt [-t | --timestamps] youtube-link"
echo "Use the '-t' flag to get the transcript with timestamps."
return 1
fi
transcript_flag="--transcript"
if [ "$1" = "-t" ] || [ "$1" = "--timestamps" ]; then
transcript_flag="--transcript-with-timestamps"
shift
fi
local video_link="$1"
fabric -y "$video_link" $transcript_flag
}
''}
'';
in
mkIf cfg.enable {
home.packages = mkIf (cfg.package != null) [ cfg.package ];
programs.bash.initExtra = mkIf cfg.enableBashIntegration posixShellCode;
programs.zsh.initContent = mkIf cfg.enableZshIntegration posixShellCode;
};
}

View file

@ -0,0 +1,39 @@
# Commands that should be applied only for interactive shells.
[[ $- == *i* ]] || return
HISTFILESIZE=100000
HISTSIZE=10000
shopt -s histappend
shopt -s checkwinsize
shopt -s extglob
shopt -s globstar
shopt -s checkjobs
if [[ ! -v BASH_COMPLETION_VERSINFO ]]; then
. "@bash-completion@/etc/profile.d/bash_completion.sh"
fi
yt() {
if [ "$#" -eq 0 ] || [ "$#" -gt 2 ]; then
echo "Usage: yt [-t | --timestamps] youtube-link"
echo "Use the '-t' flag to get the transcript with timestamps."
return 1
fi
transcript_flag="--transcript"
if [ "$1" = "-t" ] || [ "$1" = "--timestamps" ]; then
transcript_flag="--transcript-with-timestamps"
shift
fi
local video_link="$1"
fabric -y "$video_link" $transcript_flag
}

View file

@ -0,0 +1,3 @@
{
fabric-ai-example-config = ./example-config.nix;
}

View file

@ -0,0 +1,16 @@
{
programs.bash.enable = true;
programs.zsh.enable = true;
programs.fabric-ai = {
enable = true;
enablePattersAliases = true;
};
nmt.script = ''
assertFileExists home-files/.bashrc
assertFileExists home-files/.zshrc
assertFileContent home-files/.bashrc ${./bashrc}
assertFileContent home-files/.zshrc ${./zshrc}
'';
}

View file

@ -0,0 +1,46 @@
typeset -U path cdpath fpath manpath
for profile in ${(z)NIX_PROFILES}; do
fpath+=($profile/share/zsh/site-functions $profile/share/zsh/$ZSH_VERSION/functions $profile/share/zsh/vendor-completions)
done
HELPDIR="@zsh@/share/zsh/$ZSH_VERSION/help"
autoload -U compinit && compinit
# History options should be set in .zshrc and after oh-my-zsh sourcing.
# See https://github.com/nix-community/home-manager/issues/177.
HISTSIZE="10000"
SAVEHIST="10000"
HISTFILE="/home/hm-user/.zsh_history"
mkdir -p "$(dirname "$HISTFILE")"
setopt HIST_FCNTL_LOCK
unsetopt APPEND_HISTORY
setopt HIST_IGNORE_DUPS
unsetopt HIST_IGNORE_ALL_DUPS
unsetopt HIST_SAVE_NO_DUPS
unsetopt HIST_FIND_NO_DUPS
setopt HIST_IGNORE_SPACE
unsetopt HIST_EXPIRE_DUPS_FIRST
setopt SHARE_HISTORY
unsetopt EXTENDED_HISTORY
yt() {
if [ "$#" -eq 0 ] || [ "$#" -gt 2 ]; then
echo "Usage: yt [-t | --timestamps] youtube-link"
echo "Use the '-t' flag to get the transcript with timestamps."
return 1
fi
transcript_flag="--transcript"
if [ "$1" = "-t" ] || [ "$1" = "--timestamps" ]; then
transcript_flag="--transcript-with-timestamps"
shift
fi
local video_link="$1"
fabric -y "$video_link" $transcript_flag
}