flake/nixos/shell.nix
2024-12-08 19:32:32 -05:00

168 lines
5.4 KiB
Nix

{ config, pkgs, ... }:
{
#TODO: Submit a PR to nixpkgs to add xonsh support to the Starship module
# After that, we can remove this import and the disabledModules line
disabledModules = [ "programs/starship.nix" ];
imports = [ /bulk/home/cswimr/Projects/nixpkgs/nixos/modules/programs/starship.nix ];
# starship - a customizable prompt for any shell
programs.starship = {
enable = true;
# custom settings
settings = {
format = "[](bg:#1e1e2e fg:#a6e3a1)$username$hostname[](fg:#a6e3a1 bg:#89b4fa)$directory[](fg:#89b4fa bg:#cba6f7)$direnv[](fg:#cba6f7 bg:#f9e2af)$git_branch$git_status[](fg:#f9e2af bg:#1e1e2e)$character";
username = {
show_always = true;
format = "[ $user@]($style)";
style_user = "fg:#313244 bg:#a6e3a1";
style_root = "fg:#313244 bg:#a6e3a1";
};
hostname = {
ssh_only = false;
format = "[$hostname $ssh_symbol]($style)";
style = "fg:#313244 bg:#a6e3a1";
};
directory = {
format = "[ $path ]($style)";
style = "fg:#313244 bg:#89b4fa";
};
git_branch = {
format = "[ $symbol$branch(:$remote_branch) ]($style)";
symbol = " ";
style = "fg:#313244 bg:#f9e2af";
};
direnv = {
symbol = "󱄅 ";
format = "[ $symbol$loaded/$allowed ]($style)";
disabled = false;
style = "fg:#313244 bg:#cba6f7";
};
git_status = {
format = "[$all_status]($style)";
style = "fg:#313244 bg:#f9e2af";
};
git_metrics = {
format = "([+$added]($added_style))[]($added_style)";
added_style = "fg:#313244 bg:#f9e2af";
deleted_style = "fg:bright-red bg:235";
disabled = false;
};
hg_branch = {
format = "[ $symbol$branch ]($style)";
symbol = " ";
};
cmd_duration = {
format = "[ $duration ]($style)";
style = "fg:bright-white bg:18";
};
character = {
success_symbol = "[ ](#a6e3a1) ";
error_symbol = "[ ](#f38ba8) ";
};
add_newline = false;
};
};
# enable bash completions
# even though we don't use bash as our shell, xonsh uses bash completion scripts
programs.bash.completion.enable = true;
programs.command-not-found.enable = false;
users.defaultUserShell = pkgs.xonsh;
programs.xonsh =
let
bashcfg = config.programs.bash;
in
{
enable = true;
config = ''
$BASH_COMPLETIONS = ('${bashcfg.completion.package}/etc/profile.d/bash_completion.sh')
$UPDATE_OS_ENVIRON = True
$XONTRIB_CLP_ALIAS = 'shutil'
#xontrib load cd
xontrib load clp
xontrib load direnv
xontrib load sh
source-bash ${pkgs.nix-index}/etc/profile.d/command-not-found.sh
'';
package = pkgs.xonsh.override {
extraPackages = ps: [
pkgs.python311Packages.rich
# (ps.buildPythonPackage rec {
# name = "xontrib-cd";
# version = "0.3.1";
# src = pkgs.fetchFromGitHub {
# owner = "eugenesvk";
# repo = name;
# rev = version;
# sha256 = "XxSxjyCg7PeX1v3e2KKicvAPmNeq+qVqbW4fXTwAiic=";
# };
# meta = {
# homepage = "https://github.com/eugenesvk/xontrib-cd";
# description =
# "`cd` to any path without escaping in xonsh shell: `cd ~/[te] st`";
# license = pkgs.lib.licenses.mit;
# maintainers = [ "cswimr" ];
# };
# })
(ps.buildPythonPackage rec {
name = "xontrib-clp";
version = "0.1.7";
src = pkgs.fetchFromGitHub {
owner = "anki-code";
repo = name;
rev = version;
sha256 = "1ewWlwG8KY9s6qydErurvP2x+4DIPTFcjSGP1c5y83M=";
};
meta = {
homepage = "https://github.com/anki-code/xontrib-clp";
description = "Copy output to clipboard. Cross-platform.";
license = pkgs.lib.licenses.mit;
maintainers = [ "cswimr" ];
};
})
(ps.buildPythonPackage rec {
name = "xonsh-direnv";
version = "1.6.5";
src = pkgs.fetchFromGitHub {
owner = "74th";
repo = name;
rev = version;
sha256 = "huBJ7WknVCk+WgZaXHlL+Y1sqsn6TYqMP29/fsUPSyU=";
};
meta = {
homepage = "https://github.com/74th/xonsh-direnv";
description = "xonsh extension for using direnv";
license = pkgs.lib.licenses.mit;
maintainers = [ "cswimr" ];
};
})
(ps.buildPythonPackage rec {
name = "xontrib-sh";
version = "0.3.1";
src = pkgs.fetchFromGitHub {
owner = "anki-code";
repo = name;
rev = version;
sha256 = "KL/AxcsvjxqxvjDlf1axitgME3T+iyuW6OFb1foRzN8=";
};
meta = {
homepage = "https://github.com/anki-code/xontrib-sh";
description = "Paste and run commands from bash, zsh, fish, tcsh in xonsh shell.";
license = pkgs.lib.licenses.mit;
maintainers = [ "cswimr" ];
};
})
];
};
};
}