diff --git a/modules/misc/news.nix b/modules/misc/news.nix index 580efcd63..a16bd64dd 100644 --- a/modules/misc/news.nix +++ b/modules/misc/news.nix @@ -1193,6 +1193,13 @@ in A new module is available: 'services.sxhkd'. ''; } + + { + time = "2019-09-26T21:05:24+00:00"; + message = '' + A new module is available: 'programs.starship'. + ''; + } ]; }; } diff --git a/modules/modules.nix b/modules/modules.nix index 42f425d4b..f2f54f4e1 100644 --- a/modules/modules.nix +++ b/modules/modules.nix @@ -85,6 +85,7 @@ let (loadModule ./programs/pidgin.nix { }) (loadModule ./programs/rofi.nix { }) (loadModule ./programs/skim.nix { }) + (loadModule ./programs/starship.nix { }) (loadModule ./programs/ssh.nix { }) (loadModule ./programs/taskwarrior.nix { }) (loadModule ./programs/termite.nix { }) diff --git a/modules/programs/starship.nix b/modules/programs/starship.nix new file mode 100644 index 000000000..f61c044ad --- /dev/null +++ b/modules/programs/starship.nix @@ -0,0 +1,91 @@ +{ config, lib, pkgs, ... }: + +with lib; + +let + + cfg = config.programs.starship; + + configFile = config: + pkgs.runCommand "config.toml" + { + buildInputs = [ pkgs.remarshal ]; + preferLocalBuild = true; + allowSubstitutes = false; + } + '' + remarshal -if json -of toml \ + < ${pkgs.writeText "config.json" (builtins.toJSON config)} \ + > $out + ''; +in + +{ + meta.maintainers = [ maintainers.marsam ]; + + options.programs.starship = { + enable = mkEnableOption "starship"; + + settings = mkOption { + type = types.attrs; + default = {}; + description = '' + Configuration written to + ~/.config/starship.toml. + + See for the full list + of options. + ''; + }; + + enableBashIntegration = mkOption { + default = true; + type = types.bool; + description = '' + Whether to enable Bash integration. + ''; + }; + + enableZshIntegration = mkOption { + default = true; + type = types.bool; + description = '' + Whether to enable Zsh integration. + ''; + }; + + enableFishIntegration = mkOption { + default = true; + type = types.bool; + description = '' + Whether to enable Fish integration. + ''; + }; + }; + + config = mkIf cfg.enable { + home.packages = [ pkgs.starship ]; + + xdg.configFile."starship.toml" = mkIf (cfg.settings != {}) { + source = configFile cfg.settings; + }; + + programs.bash.initExtra = mkIf cfg.enableBashIntegration '' + if [ -z "$INSIDE_EMACS" ]; then + eval "$(${pkgs.starship}/bin/starship init bash)" + fi + ''; + + programs.zsh.initExtra = mkIf cfg.enableZshIntegration '' + if [ -z "$INSIDE_EMACS" ]; then + eval "$(${pkgs.starship}/bin/starship init zsh)" + fi + ''; + + programs.fish.shellInit = mkIf cfg.enableFishIntegration '' + if [ -z "$INSIDE_EMACS" ]; then + eval (${pkgs.starship}/bin/starship init fish) + fi + ''; + }; +}