225 lines
6.3 KiB
Nix
225 lines
6.3 KiB
Nix
{ config, lib, pkgs, inputs, ... }:
|
|
with lib; {
|
|
config = mkMerge [
|
|
(mkIf config.nathan.programs.util.core {
|
|
home.packages = with pkgs; [
|
|
# Rust rewrites of common shell utilites
|
|
exa
|
|
bat
|
|
fd
|
|
sd
|
|
du-dust
|
|
ripgrep
|
|
ripgrep-all
|
|
hyperfine
|
|
dogdns
|
|
duf
|
|
xcp
|
|
# User friendly cut
|
|
choose
|
|
# Man but terse
|
|
tealdeer
|
|
# rsync for _The Cloud_ :tm:
|
|
rclone
|
|
];
|
|
# Configure tmux
|
|
programs.tmux = {
|
|
enable = true;
|
|
aggressiveResize = true;
|
|
extraConfig = if pkgs.stdenv.isLinux then ''
|
|
set -g default-terminal "tmux-256color"
|
|
set -ag terminal-overrides ",xterm-256color:RGB"
|
|
set-option -g status-interval 1
|
|
set-option -g automatic-rename on
|
|
set-option -g automatic-rename-format '#{pane_current_path}: #{pane_current_command}'
|
|
'' else ''
|
|
set -g default-terminal "screen-256color"
|
|
set -ag terminal-overrides ",xterm-256color:RGB"
|
|
set-option -g status-interval 1
|
|
set-option -g automatic-rename on
|
|
set-option -g automatic-rename-format '#{pane_current_path}: #{pane_current_command}'
|
|
'';
|
|
};
|
|
# Configure btop
|
|
programs.btop = { enable = true; };
|
|
})
|
|
(mkIf config.nathan.programs.util.productivity {
|
|
home.packages = with pkgs; [
|
|
tokei
|
|
# Spell check
|
|
hunspell
|
|
hunspellDicts.en-us
|
|
# CLI Markdown renderer
|
|
glow
|
|
# Command line file manager
|
|
broot
|
|
# Much better curl
|
|
httpie
|
|
# CLI spreadsheets
|
|
visidata
|
|
# Cheatsheet manager
|
|
cheat
|
|
# Ping with a graph
|
|
gping
|
|
# Pandoc for documentation
|
|
pandoc
|
|
# Tmate for pair programming
|
|
tmate
|
|
];
|
|
})
|
|
(mkIf config.nathan.programs.util.ssh {
|
|
#########################
|
|
## SSH Configuration
|
|
#########################
|
|
programs.ssh = {
|
|
# SSH configuration
|
|
enable = true;
|
|
# extra config to set the ciphers
|
|
extraConfig = ''
|
|
Ciphers aes128-gcm@openssh.com,aes256-gcm@openssh.com,chacha20-poly1305@openssh.com,aes256-ctr,aes192-ctr,aes128-ctr
|
|
'';
|
|
# Enable compression
|
|
compression = true;
|
|
# enable session reuse
|
|
controlMaster = "auto";
|
|
controlPersist = "10m";
|
|
# Configure known hosts
|
|
matchBlocks = {
|
|
"levitation" = {
|
|
forwardAgent = true;
|
|
user = "nathan";
|
|
hostname = "100.95.223.6";
|
|
};
|
|
"perception" = {
|
|
forwardAgent = true;
|
|
user = "nathan";
|
|
hostname = "100.121.150.78";
|
|
};
|
|
"oracles" = {
|
|
forwardAgent = true;
|
|
user = "nathan";
|
|
hostname = "100.66.15.34";
|
|
};
|
|
"tounge" = {
|
|
forwardAgent = true;
|
|
user = "nathan";
|
|
hostname = "100.75.37.98";
|
|
};
|
|
"shadowchild" = {
|
|
forwardAgent = true;
|
|
user = "nathan";
|
|
hostname = "172.23.217.149";
|
|
};
|
|
"matrix.community.rs" = {
|
|
forwardAgent = true;
|
|
user = "nathan";
|
|
hostname = "100.113.74.107";
|
|
};
|
|
"fusion" = {
|
|
forwardAgent = true;
|
|
user = "nathan";
|
|
hostname = "100.99.69.14";
|
|
};
|
|
"de1955" = {
|
|
user = "de1955";
|
|
hostname = "de1955.rsync.net";
|
|
};
|
|
};
|
|
};
|
|
})
|
|
(mkIf config.nathan.programs.util.fish {
|
|
#########################
|
|
## Fish Configuration
|
|
#########################
|
|
programs.fish = {
|
|
enable = true;
|
|
# Setup our aliases
|
|
shellAliases = {
|
|
ls = "exa --icons";
|
|
la = "exa --icons -a";
|
|
lg = "exa --icons --git";
|
|
cat = "bat";
|
|
dig = "dog";
|
|
df = "duf";
|
|
idris2 = "rlwrap -s 1000 idris2 --no-banner";
|
|
};
|
|
# Custom configuration
|
|
interactiveShellInit = ''
|
|
# Setup any-nix-shell
|
|
any-nix-shell fish --info-right | source
|
|
# Load logger function
|
|
source ~/.config/fish/functions/cmdlogger.fish
|
|
# Load up vi keybindings
|
|
fish_vi_key_bindings
|
|
'';
|
|
functions = {
|
|
# Setup command logging to ~/.logs
|
|
cmdlogger = {
|
|
onEvent = "fish_preexec";
|
|
body = ''
|
|
mkdir -p ~/.logs
|
|
echo (date -u +"%Y-%m-%dT%H:%M:%SZ")" "(echo %self)" "(pwd)": "$argv >> ~/.logs/(hostname)-(date "+%Y-%m-%d").log
|
|
'';
|
|
};
|
|
};
|
|
};
|
|
programs.starship = {
|
|
enable = true;
|
|
settings = {
|
|
directory = {
|
|
truncation_length = 3;
|
|
fish_style_pwd_dir_length = 1;
|
|
};
|
|
git_commit = {
|
|
commit_hash_length = 6;
|
|
only_detached = false;
|
|
};
|
|
package = { symbol = ""; };
|
|
time = {
|
|
disabled = false;
|
|
format = "[$time]($style)";
|
|
time_format = "%I:%M %p";
|
|
};
|
|
};
|
|
};
|
|
programs.bat = {
|
|
enable = true;
|
|
config = {
|
|
theme = "zenburn";
|
|
style = "header,rule,snip,changes";
|
|
};
|
|
};
|
|
#########################
|
|
## Readline + fzf and other quality of life stuff
|
|
#########################
|
|
programs.readline = {
|
|
enable = true;
|
|
extraConfig = ''
|
|
set editing-mode vi
|
|
set show-all-if-ambiguous on
|
|
set editing-mode vi
|
|
|
|
set keymap vi-command
|
|
# these are for vi-command mode
|
|
"\e[A": history-search-backward
|
|
"\e[B": history-search-forward
|
|
j: history-search-forward
|
|
k: history-search-backward
|
|
set keymap vi-insert
|
|
# these are for vi-insert mode
|
|
"\e[A": history-search-backward
|
|
"\e[B": history-search-forward
|
|
'';
|
|
};
|
|
programs.fzf = { enable = true; };
|
|
})
|
|
(mkIf config.nathan.programs.util.json {
|
|
#########################
|
|
## JSON Utilities
|
|
#########################
|
|
programs.jq = { enable = true; };
|
|
home.packages = with pkgs; [ jc fx ];
|
|
})
|
|
];
|
|
}
|