345 lines
8.8 KiB
Nix
345 lines
8.8 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 {
|
|
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
|
|
imv
|
|
libsixel
|
|
yt-dlp
|
|
playerctl
|
|
swww
|
|
neofetch
|
|
obs-studio
|
|
selectdefaultapplication
|
|
easyeffects
|
|
|
|
inkscape
|
|
libsForQt5.okular
|
|
pavucontrol
|
|
qpwgraph
|
|
element-desktop
|
|
brave
|
|
gimp
|
|
quickemu
|
|
bitwarden
|
|
libsForQt5.kasts
|
|
libreoffice
|
|
(makeDesktopItem {
|
|
name = "logseq";
|
|
desktopName = "Logseq";
|
|
exec = "${logseq}/bin/logseq --ozone-platform-hint=auto --enable-features=WaylandWindowDecorations --disable-gpu";
|
|
})
|
|
];
|
|
|
|
programs.fish = {
|
|
enable = true;
|
|
};
|
|
|
|
services.udiskie = {
|
|
enable = true;
|
|
notify = true;
|
|
};
|
|
|
|
gtk = {
|
|
enable = true;
|
|
iconTheme = {
|
|
name = "Vimix-Doder";
|
|
package = pkgs.vimix-icon-theme;
|
|
};
|
|
cursorTheme = {
|
|
name = "Vanilla-DMZ";
|
|
package = pkgs.vanilla-dmz;
|
|
size = 24;
|
|
};
|
|
gtk3.bookmarks = [
|
|
"file:///home/tristan/Documents"
|
|
"file:///home/tristan/Pictures/Screenshots"
|
|
"file:///home/tristan/Downloads"
|
|
];
|
|
};
|
|
|
|
programs.mpv.enable = true;
|
|
programs.mpv.bindings = {
|
|
l = "seek 5";
|
|
h = "seek -5";
|
|
e = "add chapter 1";
|
|
b = "add chapter -1";
|
|
">" = "multiply speed 1.1";
|
|
"<" = "multiply speed 1/1.1";
|
|
"." = "frame-step";
|
|
"," = "frame-back-step";
|
|
"ctrl+n" = "playlist-next";
|
|
"ctrl+p" = "playlist-prev";
|
|
k = "add volume 2";
|
|
j = "add volume -2";
|
|
m = "cycle mute";
|
|
c = "cycle sub-visibility";
|
|
};
|
|
programs.mpv.scripts = [
|
|
pkgs.mpvScripts.mpris
|
|
];
|
|
|
|
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.librewolf.enable = true;
|
|
|
|
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.qutebrowser = {
|
|
enable = true;
|
|
searchEngines = {
|
|
DEFAULT = "https://search.brave.com/search?q={}";
|
|
w = "https://en.wikipedia.org/wiki/Special:Search?search={}&go=Go&ns0=1";
|
|
aw = "https://wiki.archlinux.org/?search={}";
|
|
nw = "https://nixos.wiki/index.php?search={}";
|
|
nixpkgs = "https://search.nixos.org/packages?channel=unstable&query={}";
|
|
};
|
|
settings = {
|
|
colors = {
|
|
webpage.preferred_color_scheme = "dark";
|
|
};
|
|
tabs = {
|
|
background = false;
|
|
indicator.width = 0;
|
|
favicons.scale = 2.0;
|
|
position = "left";
|
|
show = "always";
|
|
width = 40;
|
|
};
|
|
};
|
|
extraConfig = ''
|
|
c.tabs.padding = {
|
|
"bottom" : 10,
|
|
"left" : 5,
|
|
"right" : 5,
|
|
"top" : 10
|
|
}
|
|
'';
|
|
};
|
|
|
|
programs.pandoc = {
|
|
enable = true;
|
|
defaults = {
|
|
metadata = {
|
|
author = "Tristan Beedell";
|
|
};
|
|
pdf-engine = "xelatex";
|
|
};
|
|
};
|
|
|
|
programs.direnv.enable = true;
|
|
|
|
}
|