powerline-go: add module

PR #1285
This commit is contained in:
Damien Cassou 2020-05-29 17:54:38 +02:00 committed by Robert Helgesson
parent edc3bede6e
commit 478022afad
No known key found for this signature in database
GPG Key ID: 36BDAA14C2797E89
7 changed files with 164 additions and 0 deletions

2
.github/CODEOWNERS vendored
View File

@ -85,6 +85,8 @@
/modules/programs/pidgin.nix @rycee
/modules/programs/powerline-go.nix @DamienCassou
/modules/programs/rtorrent.nix @marsam
/modules/programs/ssh.nix @rycee

View File

@ -1560,6 +1560,14 @@ in
A new module is available: 'services.clipmenu'
'';
}
{
time = "2020-06-12T07:08:09+00:00";
condition = config.programs.bash.enable;
message = ''
A new module is available: 'programs.powerline-go'
'';
}
];
};
}

View File

@ -99,6 +99,7 @@ let
(loadModule ./programs/password-store.nix { })
(loadModule ./programs/pazi.nix { })
(loadModule ./programs/pidgin.nix { })
(loadModule ./programs/powerline-go.nix { })
(loadModule ./programs/qutebrowser.nix { })
(loadModule ./programs/readline.nix { })
(loadModule ./programs/rofi.nix { })

View File

@ -0,0 +1,123 @@
{ config, lib, pkgs, ... }:
with lib;
let
cfg = config.programs.powerline-go;
# Convert an option value to a string to be passed as argument to
# powerline-go:
valueToString = value:
if builtins.isList value then
builtins.concatStringsSep "," (builtins.map valueToString value)
else if builtins.isAttrs value then
valueToString
(mapAttrsToList (key: val: "${valueToString key}=${valueToString val}")
value)
else
builtins.toString value;
modulesArgument = optionalString (cfg.modules != null)
"-modules ${valueToString cfg.modules}";
newlineArgument = optionalString cfg.newline "-newline";
pathAliasesArgument = optionalString (cfg.pathAliases != null)
"-path-aliases ${valueToString cfg.pathAliases}";
otherSettingPairArgument = name: value:
if value == true then "-${name}" else "-${name} ${valueToString value}";
otherSettingsArgument = optionalString (cfg.settings != { })
(concatStringsSep " "
(mapAttrsToList otherSettingPairArgument cfg.settings));
commandLineArguments = ''
${modulesArgument} ${newlineArgument} ${pathAliasesArgument} ${otherSettingsArgument}
'';
in {
meta.maintainers = [ maintainers.DamienCassou ];
options = {
programs.powerline-go = {
enable = mkEnableOption
"Powerline-go, a beautiful and useful low-latency prompt for your shell";
modules = mkOption {
default = null;
type = types.nullOr (types.listOf types.str);
description = ''
List of module names to load. The list of all available
modules as well as the choice of default ones are at
<link xlink:href="https://github.com/justjanne/powerline-go"/>.
'';
example = [ "host" "ssh" "cwd" "gitlite" "jobs" "exit" ];
};
newline = mkOption {
default = false;
type = types.bool;
description = ''
Set to true if the prompt should be on a line of its own.
'';
example = true;
};
pathAliases = mkOption {
default = null;
type = types.nullOr (types.attrsOf types.str);
description = ''
Pairs of full-path and corresponding desired short name. You
may use '~' to represent your home directory but you should
protect it to avoid shell substitution.
'';
example = literalExample ''
{ "\\~/projects/home-manager" = "prj:home-manager"; }
'';
};
settings = mkOption {
default = { };
type = with types; attrsOf (oneOf [ bool int str (listOf str) ]);
description = ''
This can be any key/value pair as described in
<link xlink:href="https://github.com/justjanne/powerline-go"/>.
'';
example = literalExample ''
{
hostname-only-if-ssh = true;
numeric-exit-codes = true;
cwd-max-depth = 7;
ignore-repos = [ "/home/me/big-project" "/home/me/huge-project" ];
}
'';
};
extraUpdatePS1 = mkOption {
default = "";
description = "Shell code to execute after the prompt is set.";
example = ''
PS1=$PS1"NixOS> ";
'';
type = types.str;
};
};
};
config = mkIf (cfg.enable && config.programs.bash.enable) {
programs.bash.initExtra = ''
function _update_ps1() {
local old_exit_status=$?
PS1="$(${pkgs.powerline-go}/bin/powerline-go -error $? ${commandLineArguments})"
${cfg.extraUpdatePS1}
return $old_exit_status
}
if [ "$TERM" != "linux" ]; then
PROMPT_COMMAND="_update_ps1;$PROMPT_COMMAND"
fi
'';
};
}

View File

@ -57,6 +57,7 @@ import nmt {
./modules/programs/newsboat
./modules/programs/qutebrowser
./modules/programs/readline
./modules/programs/powerline-go
./modules/programs/ssh
./modules/programs/starship
./modules/programs/texlive

View File

@ -0,0 +1 @@
{ powerline-go-standard = ./standard.nix; }

View File

@ -0,0 +1,28 @@
{ config, lib, pkgs, ... }:
with lib;
{
config = {
programs = {
bash.enable = true;
powerline-go = {
enable = true;
newline = true;
modules = [ "nix-shell" ];
pathAliases = { "\\~/project/foo" = "prj-foo"; };
settings = {
ignore-repos = [ "/home/me/project1" "/home/me/project2" ];
};
};
};
nmt.script = ''
assertFileExists home-files/.bashrc
assertFileContains \
home-files/.bashrc \
'/bin/powerline-go -error $? -modules nix-shell -newline -path-aliases \~/project/foo=prj-foo -ignore-repos /home/me/project1,/home/me/project2'
'';
};
}