mirror of
https://github.com/NixOS/nixpkgs.git
synced 2025-02-06 20:23:39 +00:00
nixos/foot: init (#333390)
This commit is contained in:
commit
51550ed118
@ -100,6 +100,8 @@
|
||||
|
||||
- [Wakapi](https://wakapi.dev/), a time tracking software for programmers. Available as [services.wakapi](#opt-services.wakapi.enable).
|
||||
|
||||
- [foot](https://codeberg.org/dnkl/foot), a fast, lightweight and minimalistic Wayland terminal emulator. Available as [programs.foot](#opt-programs.foot.enable).
|
||||
|
||||
## Backward Incompatibilities {#sec-release-24.11-incompatibilities}
|
||||
|
||||
- `transmission` package has been aliased with a `trace` warning to `transmission_3`. Since [Transmission 4 has been released last year](https://github.com/transmission/transmission/releases/tag/4.0.0), and Transmission 3 will eventually go away, it was decided perform this warning alias to make people aware of the new version. The `services.transmission.package` defaults to `transmission_3` as well because the upgrade can cause data loss in certain specific usage patterns (examples: [#5153](https://github.com/transmission/transmission/issues/5153), [#6796](https://github.com/transmission/transmission/issues/6796)). Please make sure to back up to your data directory per your usage:
|
||||
|
@ -193,6 +193,7 @@
|
||||
./programs/fish.nix
|
||||
./programs/flashrom.nix
|
||||
./programs/flexoptix-app.nix
|
||||
./programs/foot
|
||||
./programs/freetds.nix
|
||||
./programs/fuse.nix
|
||||
./programs/fzf.nix
|
||||
|
27
nixos/modules/programs/foot/bashrc
Normal file
27
nixos/modules/programs/foot/bashrc
Normal file
@ -0,0 +1,27 @@
|
||||
osc7_cwd() {
|
||||
local strlen=${#PWD}
|
||||
local encoded=""
|
||||
local pos c o
|
||||
for (( pos=0; pos<strlen; pos++ )); do
|
||||
c=${PWD:$pos:1}
|
||||
case "$c" in
|
||||
[-/:_.!\'\(\)~[:alnum:]] ) o="${c}" ;;
|
||||
* ) printf -v o '%%%02X' "'${c}" ;;
|
||||
esac
|
||||
encoded+="${o}"
|
||||
done
|
||||
printf '\e]7;file://%s%s\e\\' "${HOSTNAME}" "${encoded}"
|
||||
}
|
||||
PROMPT_COMMAND=${PROMPT_COMMAND:+$PROMPT_COMMAND; }osc7_cwd
|
||||
|
||||
prompt_marker() {
|
||||
printf '\e]133;A\e\\'
|
||||
}
|
||||
PROMPT_COMMAND=${PROMPT_COMMAND:+$PROMPT_COMMAND; }prompt_marker
|
||||
|
||||
PS0+='\e]133;C\e\\'
|
||||
|
||||
command_done() {
|
||||
printf '\e]133;D\e\\'
|
||||
}
|
||||
PROMPT_COMMAND=${PROMPT_COMMAND:+$PROMPT_COMMAND; }command_done
|
20
nixos/modules/programs/foot/config.fish
Normal file
20
nixos/modules/programs/foot/config.fish
Normal file
@ -0,0 +1,20 @@
|
||||
function update_cwd_osc --on-variable PWD --description 'Notify terminals when $PWD changes'
|
||||
if status --is-command-substitution || set -q INSIDE_EMACS
|
||||
return
|
||||
end
|
||||
printf \e\]7\;file://%s%s\e\\ $hostname (string escape --style=url $PWD)
|
||||
end
|
||||
|
||||
update_cwd_osc # Run once since we might have inherited PWD from a parent shell
|
||||
|
||||
function mark_prompt_start --on-event fish_prompt
|
||||
echo -en "\e]133;A\e\\"
|
||||
end
|
||||
|
||||
function foot_cmd_start --on-event fish_preexec
|
||||
echo -en "\e]133;C\e\\"
|
||||
end
|
||||
|
||||
function foot_cmd_end --on-event fish_postexec
|
||||
echo -en "\e]133;D\e\\"
|
||||
end
|
92
nixos/modules/programs/foot/default.nix
Normal file
92
nixos/modules/programs/foot/default.nix
Normal file
@ -0,0 +1,92 @@
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
...
|
||||
}:
|
||||
|
||||
let
|
||||
cfg = config.programs.foot;
|
||||
|
||||
settingsFormat = pkgs.formats.ini {
|
||||
listsAsDuplicateKeys = true;
|
||||
mkKeyValue =
|
||||
with lib.generators;
|
||||
mkKeyValueDefault {
|
||||
mkValueString =
|
||||
v:
|
||||
mkValueStringDefault { } (
|
||||
if v == true then
|
||||
"yes"
|
||||
else if v == false then
|
||||
"no"
|
||||
else if v == null then
|
||||
"none"
|
||||
else
|
||||
v
|
||||
);
|
||||
} "=";
|
||||
};
|
||||
in
|
||||
{
|
||||
options.programs.foot = {
|
||||
enable = lib.mkEnableOption "foot terminal emulator";
|
||||
|
||||
package = lib.mkPackageOption pkgs "foot" { };
|
||||
|
||||
settings = lib.mkOption {
|
||||
inherit (settingsFormat) type;
|
||||
default = { };
|
||||
description = ''
|
||||
Configuration for foot terminal emulator. Further information can be found in {command}`man 5 foot.ini`.
|
||||
|
||||
Global configuration has to be written under the [main] section.
|
||||
'';
|
||||
example = {
|
||||
main.font = "FreeMono:size=12";
|
||||
scrollback.lines = 100000;
|
||||
};
|
||||
};
|
||||
|
||||
theme = lib.mkOption {
|
||||
type = with lib.types; nullOr str;
|
||||
default = null;
|
||||
description = ''
|
||||
Theme name. Check <https://codeberg.org/dnkl/foot/src/branch/master/themes> for available themes.
|
||||
'';
|
||||
example = "aeroroot";
|
||||
};
|
||||
|
||||
enableBashIntegration = lib.mkEnableOption "foot bash integration" // {
|
||||
default = true;
|
||||
};
|
||||
|
||||
enableFishIntegration = lib.mkEnableOption "foot fish integration" // {
|
||||
default = true;
|
||||
};
|
||||
|
||||
enableZshIntegration = lib.mkEnableOption "foot zsh integration" // {
|
||||
default = true;
|
||||
};
|
||||
};
|
||||
|
||||
config = lib.mkIf cfg.enable {
|
||||
environment = {
|
||||
systemPackages = [ cfg.package ];
|
||||
etc."xdg/foot/foot.ini".source = settingsFormat.generate "foot.ini" cfg.settings;
|
||||
};
|
||||
programs = {
|
||||
foot.settings.main.include = lib.optionals (cfg.theme != null) [
|
||||
"${pkgs.foot.themes}/share/foot/themes/${cfg.theme}"
|
||||
];
|
||||
# https://codeberg.org/dnkl/foot/wiki#user-content-shell-integration
|
||||
bash.interactiveShellInit = lib.mkIf cfg.enableBashIntegration ". ${./bashrc} # enable shell integration for foot terminal";
|
||||
fish.interactiveShellInit = lib.mkIf cfg.enableFishIntegration "source ${./config.fish} # enable shell integration for foot terminal";
|
||||
zsh.interactiveShellInit = lib.mkIf cfg.enableZshIntegration ". ${./zshrc} # enable shell integration for foot terminal";
|
||||
};
|
||||
};
|
||||
|
||||
meta = {
|
||||
maintainers = with lib.maintainers; [ linsui ];
|
||||
};
|
||||
}
|
25
nixos/modules/programs/foot/zshrc
Normal file
25
nixos/modules/programs/foot/zshrc
Normal file
@ -0,0 +1,25 @@
|
||||
function osc7-pwd() {
|
||||
emulate -L zsh # also sets localoptions for us
|
||||
setopt extendedglob
|
||||
local LC_ALL=C
|
||||
printf '\e]7;file://%s%s\e\' $HOST ${PWD//(#m)([^@-Za-z&-;_~])/%${(l:2::0:)$(([##16]#MATCH))}}
|
||||
}
|
||||
|
||||
function chpwd-osc7-pwd() {
|
||||
(( ZSH_SUBSHELL )) || osc7-pwd
|
||||
}
|
||||
add-zsh-hook -Uz chpwd chpwd-osc7-pwd
|
||||
|
||||
precmd() {
|
||||
print -Pn "\e]133;A\e\\"
|
||||
}
|
||||
|
||||
function precmd {
|
||||
if ! builtin zle; then
|
||||
print -n "\e]133;D\e\\"
|
||||
fi
|
||||
}
|
||||
|
||||
function preexec {
|
||||
print -n "\e]133;C\e\\"
|
||||
}
|
Loading…
Reference in New Issue
Block a user