299 lines
9.5 KiB
Nix
299 lines
9.5 KiB
Nix
{ pkgs, config, lib, ... }:
|
|
let
|
|
direnv = {
|
|
# Environment variables making programs stay out of $HOME, but also needing we create a directory for them
|
|
CARGOHOME = "${config.xdg.cacheHome}/cargo"; # There are config in there that we can version if one want
|
|
CCACHE_DIR = "${config.xdg.cacheHome}/ccache"; # The config file alone seems to be not enough
|
|
DASHT_DOCSETS_DIR = "${config.xdg.cacheHome}/dash_docsets";
|
|
GOPATH = "${config.xdg.cacheHome}/go";
|
|
GRADLE_USER_HOME = "${config.xdg.cacheHome}/gradle";
|
|
MIX_ARCHIVES = "${config.xdg.cacheHome}/mix/archives";
|
|
MONO_GAC_PREFIX = "${config.xdg.cacheHome}/mono";
|
|
npm_config_cache = "${config.xdg.cacheHome}/npm";
|
|
PARALLEL_HOME = "${config.xdg.cacheHome}/parallel";
|
|
TERMINFO = "${config.xdg.configHome}/terminfo";
|
|
WINEPREFIX = "${config.xdg.stateHome}/wineprefix/default";
|
|
YARN_CACHE_FOLDER = "${config.xdg.cacheHome}/yarn";
|
|
# TODO Some of that stuff is not really relavant any more
|
|
};
|
|
dotfilesPath = "$HOME/.dotfiles"; # FIXME I think we want it in ~/.config/dotfiles, also, should be an option
|
|
in
|
|
{
|
|
|
|
programs =
|
|
let
|
|
commonRc = lib.strings.concatLines ([
|
|
''
|
|
# Colored ls
|
|
# TODO Doesn't allow completion
|
|
_colored_ls() {
|
|
\ls -lh --color=always $@ | awk '
|
|
BEGIN {
|
|
FPAT = "([[:space:]]*[^[:space:]]+)";
|
|
OFS = "";
|
|
}
|
|
{
|
|
$1 = "\033[36m" $1 "\033[0m";
|
|
$2 = "\033[31m" $2 "\033[0m";
|
|
$3 = "\033[32m" $3 "\033[0m";
|
|
$4 = "\033[32m" $4 "\033[0m";
|
|
$5 = "\033[31m" $5 "\033[0m";
|
|
$6 = "\033[34m" $6 "\033[0m";
|
|
$7 = "\033[34m" $7 "\033[0m";
|
|
print
|
|
}
|
|
'
|
|
}
|
|
alias ll="_colored_ls"
|
|
alias la="_colored_ls -a"
|
|
''
|
|
] ++ map (d: "mkdir -p ${d}") (builtins.attrValues direnv));
|
|
commonSessionVariables = {
|
|
TIME_STYLE = "+%Y-%m-%d %H:%M:%S";
|
|
# Less colors
|
|
LESS = "-R";
|
|
LESS_TERMCAP_mb = "$'\E[1;31m'"; # begin blink
|
|
LESS_TERMCAP_md = "$'\E[1;36m'"; # begin bold
|
|
LESS_TERMCAP_me = "$'\E[0m'"; # reset bold/blink
|
|
LESS_TERMCAP_so = "$'\E[01;44;33m'"; # begin reverse video
|
|
LESS_TERMCAP_se = "$'\E[0m'"; # reset reverse video
|
|
LESS_TERMCAP_us = "$'\E[1;32m'"; # begin underline
|
|
LESS_TERMCAP_ue = "$'\E[0m'"; # reset underline
|
|
# Fzf
|
|
FZF_COMPLETION_OPTS = "${lib.strings.concatStringsSep " " config.programs.fzf.fileWidgetOptions}";
|
|
};
|
|
commonShellAliases = {
|
|
cp = "cp -i --reflink=auto";
|
|
grep = "grep --color=auto";
|
|
dd = "dd status=progress";
|
|
rm = "rm -v --one-file-system";
|
|
free = "free -m";
|
|
diff = "diff --color=auto";
|
|
dmesg = "dmesg --ctime";
|
|
wget = "wget --hsts-file ${config.xdg.cacheHome}/wget-hsts";
|
|
};
|
|
historySize = 100000;
|
|
historyFile = "${config.xdg.cacheHome}/shell_history";
|
|
in
|
|
{
|
|
home-manager.enable = true;
|
|
bash = {
|
|
enable = true;
|
|
bashrcExtra = lib.strings.concatLines [
|
|
commonRc
|
|
''
|
|
shopt -s expand_aliases
|
|
shopt -s histappend
|
|
''
|
|
];
|
|
sessionVariables = commonSessionVariables;
|
|
historySize = historySize;
|
|
historyFile = historyFile;
|
|
historyFileSize = historySize;
|
|
historyControl = [ "erasedups" "ignoredups" "ignorespace" ];
|
|
shellAliases = commonShellAliases;
|
|
};
|
|
zsh = {
|
|
enable = true;
|
|
enableAutosuggestions = true;
|
|
enableCompletion = true;
|
|
enableSyntaxHighlighting = true;
|
|
# syntaxHighlighting.enable = true; # 23.11 syntax
|
|
historySubstringSearch.enable = true;
|
|
initExtra = lib.strings.concatLines [
|
|
commonRc
|
|
(builtins.readFile ./zshrc.sh)
|
|
];
|
|
defaultKeymap = "viins";
|
|
history = {
|
|
size = historySize;
|
|
save = historySize;
|
|
path = historyFile;
|
|
expireDuplicatesFirst = true;
|
|
};
|
|
sessionVariables = commonSessionVariables;
|
|
shellAliases = commonShellAliases;
|
|
};
|
|
dircolors = {
|
|
enable = true;
|
|
enableBashIntegration = true;
|
|
enableZshIntegration = true;
|
|
# UPST This thing put stuff in .dircolors when it actually doesn't have to
|
|
};
|
|
powerline-go = {
|
|
enable = true;
|
|
modules = [ "user" "host" "venv" "cwd" "perms" "git" ];
|
|
modulesRight = [ "jobs" "exit" "duration" "load" ];
|
|
settings = {
|
|
colorize-hostname = true;
|
|
max-width = 25;
|
|
cwd-max-dir-size = 10;
|
|
duration = "$( test -n \"$__TIMER\" && echo $(( $EPOCHREALTIME - $\{__TIMER:-EPOCHREALTIME})) || echo 0 )";
|
|
# UPST Implement this properly in home-manager, would allow for bash support
|
|
};
|
|
extraUpdatePS1 = ''unset __TIMER'';
|
|
};
|
|
# neovim = {
|
|
# enable = true;
|
|
# defaultEditor = true;
|
|
# vimAlias = true;
|
|
# viAlias = true;
|
|
# vimdiffAlias = true;
|
|
# };
|
|
# FIXME Still want this despite using nixvim
|
|
gpg = {
|
|
enable = true;
|
|
homedir = "${config.xdg.stateHome}/gnupg";
|
|
settings = {
|
|
# Remove fluff
|
|
no-greeting = true;
|
|
no-emit-version = true;
|
|
no-comments = true;
|
|
# Output format that I prefer
|
|
keyid-format = "0xlong";
|
|
# Show fingerprints
|
|
with-fingerprint = true;
|
|
# Make sure to show if key is invalid
|
|
# (should be default on most platform,
|
|
# but just to be sure)
|
|
list-options = "show-uid-validity";
|
|
verify-options = "show-uid-validity";
|
|
# Stronger algorithm (https://wiki.archlinux.org/title/GnuPG#Different_algorithm)
|
|
personal-digest-preferences = "SHA512";
|
|
cert-digest-algo = "SHA512";
|
|
default-preference-list = "SHA512 SHA384 SHA256 SHA224 AES256 AES192 AES CAST5 ZLIB BZIP2 ZIP Uncompressed";
|
|
personal-cipher-preferences = "TWOFISH CAMELLIA256 AES 3DES";
|
|
};
|
|
publicKeys = [{
|
|
source = builtins.fetchurl {
|
|
url = "https://keys.openpgp.org/vks/v1/by-fingerprint/4FBA930D314A03215E2CDB0A8312C8CAC1BAC289";
|
|
sha256 = "sha256:10y9xqcy1vyk2p8baay14p3vwdnlwynk0fvfbika65hz2z8yw2cm";
|
|
};
|
|
trust = "ultimate";
|
|
}];
|
|
};
|
|
fzf = {
|
|
enable = true;
|
|
enableZshIntegration = true;
|
|
defaultOptions = [ "--height 40%" "--layout=default" ];
|
|
fileWidgetOptions = [ "--preview '[[ -d {} ]] && ls -l --color=always {} || [[ \$(file --mime {}) =~ binary ]] && file --brief {} || (highlight -O ansi -l {} || coderay {} || rougify {} || cat {}) 2> /dev/null | head -500'" ];
|
|
};
|
|
# TODO highlight or bat
|
|
nix-index = {
|
|
enable = true;
|
|
enableZshIntegration = true;
|
|
};
|
|
less.enable = true;
|
|
};
|
|
home = {
|
|
stateVersion = "23.05";
|
|
language = {
|
|
base = "en_US.UTF-8";
|
|
time = "en_DK.UTF-8";
|
|
};
|
|
packages = with pkgs; [
|
|
# dotfiles dependencies
|
|
coreutils
|
|
bash
|
|
gnugrep
|
|
gnused
|
|
gnutar
|
|
openssl
|
|
git
|
|
wget
|
|
curl
|
|
python3Packages.pip
|
|
ansible # TODO Reevaluate
|
|
|
|
# shell
|
|
zsh-completions
|
|
nix-zsh-completions
|
|
zsh-history-substring-search
|
|
antigen # TODO Reevaluate
|
|
powerline-go
|
|
|
|
# terminal essentials
|
|
moreutils
|
|
man
|
|
visidata
|
|
nodePackages.insect
|
|
translate-shell
|
|
unzip
|
|
unrar
|
|
p7zip
|
|
|
|
# remote
|
|
openssh
|
|
rsync
|
|
borgbackup
|
|
|
|
# cleanup
|
|
ncdu
|
|
jdupes
|
|
duperemove
|
|
optipng
|
|
libjpeg
|
|
# FIXME reflac not available (but also a dumb shell script)
|
|
|
|
# local monitoring
|
|
htop
|
|
iotop
|
|
iftop
|
|
lsof
|
|
strace
|
|
pv
|
|
progress
|
|
speedtest-cli
|
|
|
|
# multimedia toolbox
|
|
ffmpeg
|
|
sox
|
|
imagemagick
|
|
|
|
# password
|
|
pass
|
|
pwgen
|
|
|
|
# Mail
|
|
isync
|
|
msmtp
|
|
notmuch
|
|
neomutt
|
|
lynx
|
|
|
|
# Organisation
|
|
vdirsyncer
|
|
khard
|
|
khal
|
|
todoman
|
|
syncthing
|
|
|
|
];
|
|
sessionVariables = {
|
|
# Favourite commands
|
|
PAGER = "${pkgs.coreutils}/bin/less";
|
|
EDITOR = "${pkgs.neovim}/bin/nvim";
|
|
VISUAL = "${pkgs.neovim}/bin/nvim";
|
|
BROWSER = "${config.programs.qutebrowser.package}/bin/qutebrowser";
|
|
} // direnv // {
|
|
BOOT9_PATH = "${config.xdg.dataHome}/citra-emu/sysdata/boot9.bin";
|
|
CCACHE_CONFIGPATH = "${config.xdg.configHome}/ccache.conf";
|
|
INPUTRC = "${config.xdg.configHome}/inputrc";
|
|
LESSHISTFILE = "${config.xdg.stateHome}/lesshst";
|
|
NODE_REPL_HISTORY = "${config.xdg.cacheHome}/node_repl_history";
|
|
PYTHONSTARTUP = "${config.xdg.configHome}/pythonstartup.py";
|
|
RXVT_SOCKET = "${config.xdg.stateHome}/urxvtd"; # Used to want -$HOME suffix, hopefullt this isn't needed
|
|
SCREENRC = "${config.xdg.configHome}/screenrc";
|
|
SQLITE_HISTFILE = "${config.xdg.stateHome}/sqlite_history";
|
|
YARN_DISABLE_SELF_UPDATE_CHECK = "true"; # This also disable the creation of a ~/.yarnrc file
|
|
# XAUTHORITY = "${config.xdg.configHome}/Xauthority"; # Disabled as this causes lock-ups with DMs
|
|
};
|
|
# TODO Session variables only get reloaded on login I think.
|
|
sessionPath = [
|
|
"$HOME/.local/bin"
|
|
"${config.home.sessionVariables.GOPATH}"
|
|
"${dotfilesPath}/config/scripts"
|
|
];
|
|
};
|
|
}
|