nix/global/home/default.nix

253 lines
6.7 KiB
Nix

{
config,
pkgs,
...
}:
# https://nix-community.github.io/home-manager/options.html
let
my-deps = {
notify-send = "${pkgs.libnotify}/bin/notify-send";
playerctl = "${pkgs.playerctl}/bin/playerctl";
grim = "${pkgs.grim}/bin/grim";
slurp = "${pkgs.slurp}/bin/slurp";
amixer = "${pkgs.alsa-utils}/bin/amixer";
swaybg = "${pkgs.swaybg}/bin/swaybg";
terminal = "${pkgs.foot}/bin/foot";
chafa = "${pkgs.chafa}/bin/chafa";
exiftool = "${pkgs.exiftool}/bin/exiftool";
wc = "${pkgs.coreutils}/bin/wc";
jq = "${pkgs.jq}/bin/jq";
hyprctl = "${pkgs.hyprland}/bin/hyprctl";
xargs = "${pkgs.findutils}/bin/xargs";
menu = "${config.programs.menu.package}${config.programs.menu.dmenuCommand}";
fileman = "${pkgs.pcmanfm}/bin/pcmanfm";
gawk = "${pkgs.gawk}/bin/awk";
glow = "${pkgs.glow}/bin/glow";
ffmpegthumbnailer = "${pkgs.ffmpegthumbnailer}/bin/ffmpegthumbnailer";
};
lf-sixel = pkgs.callPackage ../../custom/lf-sixel/. {};
in {
imports = [
./graphical.nix
];
programs.home-manager.enable = true;
home.username = "tristan";
home.homeDirectory = "/home/tristan";
xdg.userDirs.enable = true;
home.packages = with pkgs; [
libnotify
dig
jq
mosh
ripgrep
usbutils
wl-clipboard
du-dust
htop
libsixel
yt-dlp
playerctl
neofetch
];
programs.fish = {
enable = true;
};
services.udiskie = {
enable = true;
notify = true;
};
programs.rbw = {
enable = true;
settings = {
email = "tristan@tristans.cloud";
base_url = "https://vault.tristans.cloud";
pinentry = "gnome3";
};
};
programs.ssh.enable = true;
programs.ssh.matchBlocks = {
"git.tristans.cloud" = {
user = "git";
hostname = "100.116.82.65";
port = 2222;
};
"alpine" = {
hostname = "100.116.82.65";
user = "tristan";
};
};
programs.lf.enable = true;
programs.lf.package = lf-sixel;
programs.lf.keybindings = {
D = "trash";
R = "drag";
"<f-2>" = ":rename";
"<enter>" = "open-with";
};
programs.lf.commands = {
drag = "%${pkgs.ripdrag}/bin/ripdrag -x \"$fx\"";
trash = "%${pkgs.trash-cli}/bin/trash-put \"$fx\"";
open = "$set -f; ${pkgs.ranger}/bin/rifle -p 0 \"$fx\"";
open-with = '' ''${{
set -f
${pkgs.ranger}/bin/rifle -l "$fx"
read -p "Open with: " method
${pkgs.ranger}/bin/rifle -p "$method" "$fx"
}}'';
bulk-rename = '' ''${{
old="$(mktemp)"
new="$(mktemp)"
if [ -n "$fs" ]; then
fs="$(basename -a $fs)"
else
fs="$(ls)"
fi
printf '%s\n' "$fs" >"$old"
printf '%s\n' "$fs" >"$new"
$EDITOR "$new"
[ "$(wc -l < "$new")" -ne "$(wc -l < "$old")" ] && exit
paste "$old" "$new" | while IFS= read -r names; do
src="$(printf '%s' "$names" | cut -f1)"
dst="$(printf '%s' "$names" | cut -f2)"
if [ "$src" = "$dst" ] || [ -e "$dst" ]; then
continue
fi
mv -- "$src" "$dst"
done
rm -- "$old" "$new"
lf -remote "send $id unselect"
}}'';
};
programs.lf.previewer.source = pkgs.writeShellScript "preview" ''
image () {
echo "$1"
${my-deps.chafa} "$1" -f sixel -s "$(($2/2))x$3" | sed 's/#/\n#/g'
${my-deps.exiftool} "$1"
}
batted () {
cat "$@"
}
mkdir -p "$HOME/.cache/lf"
CACHE="$HOME/.cache/lf/thumbnail.$(stat --printf '%n\0%i\0%F\0%s\0%W\0%Y' -- "$(readlink -f "$1")" | sha256sum | awk '{print $1}'))"
case "$(printf "%s\n" "$(readlink -f "$1")" | awk '{print tolower($0)}')" in
*.tgz|*.tar.gz) tar tzf "$1" ;;
*.tar.bz2|*.tbz2) tar tjf "$1" ;;
*.tar.txz|*.txz) xz --list "$1" ;;
*.tar) tar tf "$1" ;;
*.zip|*.jar|*.war|*.ear|*.oxt) unzip -l "$1" ;;
*.rar) unrar l "$1" ;;
*.md) ${my-deps.glow} -s dark "$1" ;;
*.7z) 7z l "$1" ;;
*.[1-8]) man "$1" | col -b ;;
*.o) nm "$1";;
*.torrent) transmission-show "$1" ;;
*.iso) iso-info --no-header -l "$1" ;;
*.odt|*.ods|*.odp|*.sxw) odt2txt "$1" ;;
*.doc) catdoc "$1" ;;
*.docx) docx2txt "$1" - ;;
*.xml|*.html) w3m -dump "$1";;
*.xls|*.xlsx)
ssconvert --export-type=Gnumeric_stf:stf_csv "$1" "fd://1" | batted --language=csv
;;
*.wav|*.mp3|*.flac|*.m4a|*.wma|*.ape|*.ac3|*.og[agx]|*.spx|*.opus|*.as[fx]|*.mka)
${my-deps.exiftool} "$1"
;;
*.pdf)
[ ! -f "$CACHE.jpg" ] && \
pdftoppm -jpeg -f 1 -singlefile "$1" "$CACHE"
image "$CACHE.jpg" "$2" "$3" "$4" "$5"
;;
*.epub)
[ ! -f "$CACHE" ] && \
epub-thumbnailer "$1" "$CACHE" 1024
image "$CACHE" "$2" "$3" "$4" "$5"
;;
*.cbz|*.cbr|*.cbt)
[ ! -f "$CACHE" ] && \
comicthumb "$1" "$CACHE" 1024
image "$CACHE" "$2" "$3" "$4" "$5"
;;
*.avi|*.mp4|*.wmv|*.dat|*.3gp|*.ogv|*.mkv|*.mpg|*.mpeg|*.vob|*.fl[icv]|*.m2v|*.mov|*.webm|*.ts|*.mts|*.m4v|*.r[am]|*.qt|*.divx)
[ ! -f "$CACHE.jpg" ] && \
${my-deps.ffmpegthumbnailer} -i "$1" -o "$CACHE.jpg" -s 0 -q 5
image "$CACHE.jpg" "$2" "$3" "$4" "$5"
;;
*.bmp|*.jpg|*.jpeg|*.png|*.xpm|*.webp|*.jfif)
image "$1" "$2" "$3" "$4" "$5"
;;
*.svg)
[ ! -f "$CACHE.jpg" ] && \
convert "$1" "$CACHE.jpg"
image "$CACHE.jpg" "$2" "$3" "$4" "$5"
;;
*.ino)
batted --language=cpp "$1"
;;
*)
batted "$1"
;;
esac
'';
home.file.".icons/default".source = "${pkgs.vanilla-dmz}/share/icons/Vanilla-DMZ";
programs.helix = {
enable = true;
languages = {
nix = {
auto-format = true;
language-server = {
command = "${pkgs.rnix-lsp}/bin/rnix-lsp";
};
};
go = {
auto-format = true;
language-server = {
command = "${pkgs.gopls}/bin/gopls";
};
};
typescript = {
auto-format = true;
language-server = {
command = "${pkgs.nodePackages.typescript-language-server}/bin/typescript-language-server";
};
};
};
};
home.file.".config/pipewire/pipewire.conf.d/raop-discover.conf".text = ''
context.modules = [
{
name = libpipewire-module-raop-discover
args = { }
}
]
'';
services.kdeconnect = {
enable = true;
indicator = true;
};
programs.pandoc = {
enable = true;
defaults = {
metadata = {
author = "Tristan Beedell";
};
pdf-engine = "xelatex";
};
};
programs.direnv.enable = true;
}