You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

275 lines
8.7 KiB
Nix

{ pkgs, ... }:
let
secrets = import ./secrets.nix;
in
{
home.packages = with pkgs; [
ripgrep fd wget mosh w3m nnn urlview hexyl httpie timg sox du-dust duplicati bitwarden-cli gnupg gpg-tui rage sd eva glow restic spotify-tui spotifyd slides manix amfora weechat duf procs pandoc magic-wormhole qrcp pastel jq jo fx jc miller visidata sc-im bandwhich nixfmt shellcheck fontconfig cacert vale
nodejs deno yarn nodePackages.typescript-language-server nodePackages.stylelint nodePackages.js-beautify nodePackages.expo-cli
# ocaml dune_2 ocamlPackages.utop ocamlPackages.ocp-indent ocamlPackages.merlin
rustc go cmake # racket-minimal
ghc cargo haskell-language-server hlint haskellPackages.hoogle
ispell aspell aspellDicts.en aspellDicts.en-computers aspellDicts.en-science aspellDicts.fr aspellDicts.de aspellDicts.eo aspellDicts.es
];
home.sessionVariables = {
EDITOR = "$PATH:${builtins.getEnv "HOME"}/.local/bin/lvim";
BROSWER = "open";
MANPAGER = "sh -c 'col -bx | bat -l man -p'";
PATH = "$PATH:${builtins.getEnv "HOME"}/.cargo/bin";
EXA_ICON_SPACING = 2;
};
programs.home-manager.enable = true;
programs.tmux = {
enable = true;
shortcut = "a";
keyMode = "vi";
baseIndex = 1;
clock24 = true;
newSession = true;
secureSocket = false;
plugins = with pkgs.tmuxPlugins; [
resurrect # prefix ctrl-s to save sessions; prefix ctrl-r to restore
continuum # automatically save the session every 15 minutes
# suspend # F12 to disable the "outer" nested session
tmux-fzf
sessionist # prefix g to switch sessions; prefix C to create; prefix X to kill; prefix S to switch back; prefix @ to promote
sensible
pain-control # prefix |, -, \, _ to split; prefix h, j, k, l to switch; prefix H, J, K, L to resize; prefix <, > to move
fzf-tmux-url # prefix u -> fzf urls
yank # prefix y -> copy command line to clipboard; prefix Y -> copy pwd to clipboard; search + y -> copy to clipboard
open # highlight: o -> open; ctrl-o -> $EDITOR; S -> web search
vim-tmux-navigator # ctrl-h, -j, -k, -l -> move between tmux and vim splits
];
# set -g set-titles on
# set -g set-titles-string "#H (#S)"
extraConfig = ''
set -g mouse on
set -g status-right ""
set -g status-left ""
set -g status-style fg=white,bg=black
set-window-option -g window-status-format '#[fg=black,bright,nodim]#I #[fg=white,bright,dim]#W '
set-window-option -g window-status-current-format '#[fg=black,bright,nodim]#I #[fg=white,bright,nodim]#W '
TMUX_FZF_LAUNCH_KEY="Space"
'';
};
programs.exa = {
enable = true;
enableAliases = true;
};
programs.zoxide = {
# z doc -> cd ~/Documents; zi -> interactive
enable = true;
enableZshIntegration = true;
};
programs.zsh = {
enable = true;
enableAutosuggestions = true;
oh-my-zsh = {
enable = true;
plugins = [ "git" "httpie" "aws" "fd" "fzf" "mosh" "npm" "ripgrep" "rsync" "sudo" "yarn" "vi-mode" ];
};
shellAliases = {
l = "exa -lah --icons --git";
n = "nnn";
h = "himalaya";
er = "rm -rf logs; unzip -o";
srsync = "rsync --rsync-path='sudo rsync'";
vim = "~/.local/bin/lvim";
lg = "lazygit";
ambient1 = "play -n -c1 synth whitenoise lowpass -1 120 lowpass -1 120 lowpass -1 120 gain +16";
ambient2 = "play -c 2 -n synth brownnoise lowpass 200";
ambient3 = "play -c 2 -n synth brownnoise lowpass 150 loudness +10";
};
};
programs.direnv = {
enable = true;
enableZshIntegration = true;
};
programs.starship = {
enable = true;
enableZshIntegration = true;
};
programs.fzf = {
# ctrl-t, ctrl-r, ssh **<tab>
enable = true;
enableZshIntegration = true;
defaultCommand = "fd --type file --color=always";
defaultOptions = [
"--height 40%"
"--border"
"--ansi"
"--color bg+:#302D41,bg:#1E1E2E,spinner:#F8BD96,hl:#F28FAD"
"--color=fg:#D9E0EE,header:#F28FAD,info:#DDB6F2,pointer:#F8BD96"
"--color=marker:#F8BD96,fg+:#F2CDCD,prompt:#DDB6F2,hl+:#F28FAD"
];
fileWidgetCommand = "fd --type file --color=always";
fileWidgetOptions = [ "--min-height 30 --preview-window noborder --preview '(bat --style=numbers,changes --wrap never --color always {} || cat {} || tree -C {}) 2> /dev/null'" ];
};
programs.navi = {
# ctrl-G
enable = true;
enableZshIntegration = true;
};
programs.ssh = {
enable = true;
matchBlocks = {
dustinswan = {
inherit (secrets.dustinswan) user;
inherit (secrets.dustinswan) hostname;
};
dswan = {
inherit (secrets.dswan) user;
inherit (secrets.dswan) hostname;
};
aws = {
inherit (secrets.visionable-aws) user;
inherit (secrets.visionable-aws) hostname;
identityFile = "/Users/dustinswan/.ssh/id_rsa";
extraOptions = { PubkeyAcceptedKeyTypes = "+ssh-rsa"; HostKeyAlgorithms = "+ssh-rsa"; };
};
};
};
programs.git = {
enable = true;
userName = "Dustin Swan";
userEmail = "dustin@dustinswan.com";
signing = {
signByDefault = true;
key = "AD11750151C10881970BD943AB49BD6B2B3A6377";
};
aliases = {
# https://github.com/ohmyzsh/ohmyzsh/tree/master/plugins/git
lg = "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr)%C(bold blue)<%an>%Creset' --abbrev-commit";
};
delta = {
enable = true;
options = {
syntax-theme = "Nord";
};
};
};
programs.gh.enable = true;
programs.lazygit.enable = true;
programs.gitui = {
enable = true;
keyConfig = ''(
focus_right: Some(( code: Char('l'), modifiers: ( bits: 0,),)),
focus_left: Some(( code: Char('h'), modifiers: ( bits: 0,),)),
focus_above: Some(( code: Char('k'), modifiers: ( bits: 0,),)),
focus_below: Some(( code: Char('j'), modifiers: ( bits: 0,),)),
open_help: Some(( code: F(1), modifiers: ( bits: 0,),)),
move_left: Some(( code: Char('h'), modifiers: ( bits: 0,),)),
move_right: Some(( code: Char('l'), modifiers: ( bits: 0,),)),
move_up: Some(( code: Char('k'), modifiers: ( bits: 0,),)),
move_down: Some(( code: Char('j'), modifiers: ( bits: 0,),)),
popup_up: Some(( code: Char('p'), modifiers: ( bits: 2,),)),
popup_down: Some(( code: Char('n'), modifiers: ( bits: 2,),)),
page_up: Some(( code: Char('b'), modifiers: ( bits: 2,),)),
page_down: Some(( code: Char('f'), modifiers: ( bits: 2,),)),
home: Some(( code: Char('g'), modifiers: ( bits: 0,),)),
end: Some(( code: Char('G'), modifiers: ( bits: 1,),)),
shift_up: Some(( code: Char('K'), modifiers: ( bits: 1,),)),
shift_down: Some(( code: Char('J'), modifiers: ( bits: 1,),)),
edit_file: Some(( code: Char('I'), modifiers: ( bits: 1,),)),
status_reset_item: Some(( code: Char('U'), modifiers: ( bits: 1,),)),
diff_reset_lines: Some(( code: Char('u'), modifiers: ( bits: 0,),)),
diff_stage_lines: Some(( code: Char('s'), modifiers: ( bits: 0,),)),
stashing_save: Some(( code: Char('w'), modifiers: ( bits: 0,),)),
stashing_toggle_index: Some(( code: Char('m'), modifiers: ( bits: 0,),)),
stash_open: Some(( code: Char('l'), modifiers: ( bits: 0,),)),
abort_merge: Some(( code: Char('M'), modifiers: ( bits: 1,),)),
)'';
};
programs.helix = {
enable = true;
settings = {
theme = "nord";
lsp.display-messages = true;
keys.normal = {
C-h = "jump_view_left";
C-l = "jump_view_right";
};
};
};
programs.neovim = {
enable = true;
viAlias = true;
vimAlias = true;
vimdiffAlias = true;
withNodeJs = true;
withPython3 = true;
};
home.file.lunarVim = {
target = ".config/lvim/config.lua";
source = ./lunar.lua;
};
programs.bat = {
enable = true;
config = {
theme = "Nord";
};
};
programs.gpg.enable = true;
programs.mpv.enable = true;
programs.noti.enable = true;
programs.bottom.enable = true;
programs.tealdeer.enable = true;
programs.keychain = {
enable = true;
enableZshIntegration = true;
inheritType = "any";
agents = [ "gpg" "ssh" ];
keys = [ "id_rsa" "2B3A6377" ];
};
programs.newsboat = {
enable = true;
extraConfig = ''
urls-source "inoreader"
inoreader-app-id "${secrets.inoreader.id}"
inoreader-app-key "${secrets.inoreader.key}"
inoreader-login "dustin@dustinswan.com"
inoreader-passwordeval "gpg --decrypt ~/.inoreader-password.gpg"
inoreader-min-items 100
unbind-key j
unbind-key k
bind-key j down
bind-key k up
'';
};
}