dotfiles/home/modules/general.nix

322 lines
8.9 KiB
Nix
Raw Normal View History

2023-12-25 03:40:33 +07:00
{ config
, pkgs
, lib
, inputs
, ...
}:
2023-01-24 02:24:40 +07:00
{
imports = [
./options.nix
./zsh.nix
./fish.nix
];
2024-07-13 05:33:43 +07:00
manual.json.enable = !config.minimal;
2023-01-24 02:24:40 +07:00
services.gpg-agent = {
2024-07-13 05:33:43 +07:00
enable = !config.minimal;
2023-01-24 02:24:40 +07:00
enableSshSupport = true;
maxCacheTtl = 72000;
maxCacheTtlSsh = 72000;
2024-03-19 15:30:38 +07:00
pinentryPackage = pkgs.pinentry.tty;
2023-01-24 02:24:40 +07:00
};
home.shellAliases = {
s = "sudo -A";
se = "sudo -AE";
l = "lsd";
2023-09-13 17:20:18 +07:00
la = "lsd -A";
ll = "lsd -l";
g = "git";
gp = "git push";
gr = "git rebase";
gri = "git rebase -i";
2023-12-22 19:22:17 +07:00
grc = "git rebase --continue";
gc = "git commit";
gca = "git commit --amend";
gm = "git merge";
};
2023-01-24 02:24:40 +07:00
programs = {
atuin = {
enable = true;
enableFishIntegration = false;
settings = {
update_check = false;
};
};
nnn = let pluginSrc = "${pkgs.nnn.src}/plugins"; in {
enable = true;
2023-12-22 19:22:17 +07:00
package = (pkgs.nnn.override { withNerdIcons = true; }).overrideAttrs (oldAttrs: {
# no need to add makeWrapper to nativeBuildInputs as home-manager does it already
postInstall =
let nnnArchiveRegex = "\\.(${lib.strings.concatStringsSep "|" [
"7z" "a" "ace" "alz" "arc" "arj" "bz" "bz2" "cab" "cpio" "deb" "gz" "jar" "lha" "lz" "lzh" "lzma" "lzo" "rar" "rpm" "rz" "t7z" "tar" "tbz" "tbz2" "tgz" "tlz" "txz" "tZ" "tzo" "war" "xpi" "xz" "Z" "zip"
2023-12-22 19:22:17 +07:00
]})$"; in ''
wrapProgram $out/bin/nnn ${lib.escapeShellArgs [
"--set" "GUI" "1"
"--set" "NNN_OPENER" "${pluginSrc}/nuke"
"--set" "NNN_ARCHIVE" nnnArchiveRegex
# -a: auto create fifo file
# -c: use NNN_OPENER
# -x: x server features
2023-12-22 19:22:17 +07:00
"--add-flags" "-a -c -x"
]}
'';
});
extraPackages = with pkgs; [
# utils
2023-06-20 15:11:01 +07:00
gnused mktemp fzf coreutils-full findutils xdg-utils gnupg whois curl
2024-07-13 05:33:43 +07:00
file mediainfo unzip gnutar man rclone
# for preview
2023-09-13 17:20:18 +07:00
# exa - TODO: replace with eza wrapper?
2024-07-13 05:33:43 +07:00
bat libarchive atool glow
# for opening
2024-07-13 05:33:43 +07:00
p7zip unrar-wrapper
] ++ lib.optionals (!config.minimal) [
odt2txt w3m sshfs trash-cli
2023-04-06 21:00:49 +07:00
];
plugins = {
src = pluginSrc;
mappings = {
p = "-preview-tui";
P = "fzplug";
D = "dragdrop";
c = "-chksum";
d = "-diffs";
f = "fzopen";
s = "suedit";
x = "togglex";
u = "umounttree";
};
};
};
2023-01-24 02:24:40 +07:00
home-manager.enable = true;
# i only use this as a login shell
2023-01-24 02:24:40 +07:00
bash = {
2024-07-13 05:33:43 +07:00
enable = !config.minimal;
2023-01-26 04:35:21 +07:00
initExtra = ''
bind -x '"\C-r": __atuin_history'
export ATUIN_NOBIND=true
'';
2023-01-24 02:24:40 +07:00
};
git = {
2024-07-13 05:33:43 +07:00
enable = !config.minimal;
2023-01-24 02:24:40 +07:00
package = pkgs.gitAndTools.gitFull;
delta.enable = true;
extraConfig = {
2023-10-26 06:49:55 +07:00
commit.gpgsign = true;
# disable the atrocious gui password prompt
core.askPass = "";
# ...and prefer getting passwords from libsecret (and storing them there)
credential.helper = "${pkgs.gitAndTools.gitFull}/bin/git-credential-libsecret";
2023-04-22 07:15:07 +07:00
init.defaultBranch = "master";
2023-10-26 02:01:59 +07:00
# no need for git pust -u origin <branch>
push.autoSetupRemote = true;
# allow different upstream branch name
push.default = "upstream";
};
2023-06-20 15:11:01 +07:00
lfs.enable = true;
2023-01-24 02:24:40 +07:00
};
2023-01-27 04:05:30 +07:00
bat = {
enable = true;
};
bottom = {
enable = true;
settings = {
flags.network_use_bytes = true;
flags.enable_gpu_memory = true;
};
};
2023-01-27 04:05:30 +07:00
lsd = {
enable = true;
settings = {
date = "+%Y-%m-%d %H:%M:%S";
permission = "octal";
size = "short";
};
};
2023-01-24 02:24:40 +07:00
ssh = {
2024-07-13 05:33:43 +07:00
enable = !config.minimal;
2023-01-24 02:24:40 +07:00
compression = true;
};
tmux = {
enable = true;
clock24 = true;
customPaneNavigationAndResize = true;
keyMode = "vi";
};
gpg = {
2024-07-13 05:33:43 +07:00
enable = !config.minimal;
2023-01-24 02:24:40 +07:00
homedir = "${config.xdg.dataHome}/gnupg";
mutableKeys = true;
mutableTrust = true;
};
2023-02-20 00:49:39 +07:00
readline = {
enable = true;
variables.editing-mode = "vi";
variables.show-mode-in-prompt = true;
2023-02-20 00:49:39 +07:00
};
nix-index = {
2024-07-13 05:33:43 +07:00
enable = !config.minimal;
# don't add pkgs.nix to PATH
# use the nix that's already in PATH
# (because I use nix plugins and plugins are nix version-specific)
package = pkgs.nix-index-unwrapped;
};
#neomutt = {
# enable = true;
# sidebar.enable = true;
# vimKeys = true;
#};
alot = {
2024-07-13 05:33:43 +07:00
enable = !config.minimal;
settings = {
handle_mouse = true;
initial_command = "search tag:inbox AND NOT tag:killed";
prefer_plaintext = true;
};
};
2024-07-13 05:33:43 +07:00
msmtp.enable = !config.minimal;
notmuch = {
2024-07-13 05:33:43 +07:00
enable = !config.minimal;
hooks.preNew = ''
${config.services.mbsync.package}/bin/mbsync --all || ${pkgs.coreutils}/bin/true
'';
};
2024-07-13 05:33:43 +07:00
mbsync.enable = !config.minimal;
};
#services.mbsync.enable = true;
# TODO: see https://github.com/pazz/alot/issues/1632
2024-07-13 05:33:43 +07:00
home.file.".mailcap" = lib.mkIf (!config.minimal) {
text = ''
text/html; ${pkgs.w3m}/bin/w3m -dump -o document_charset=%{charset} -o display_link_number=1 '%s'; nametemplate=%s.html; copiousoutput
'';
};
2024-07-13 05:33:43 +07:00
home.file.".cache/nix-index/files" = lib.mkIf (!config.minimal) {
source =
assert config.xdg.cacheHome == "${config.home.homeDirectory}/.cache";
inputs.nix-index-database.packages.${pkgs.system}.nix-index-database;
};
2023-01-24 02:24:40 +07:00
2024-07-13 05:33:43 +07:00
systemd.user.tmpfiles.rules = lib.mkIf (!config.minimal)
(builtins.map (file: "r! \"/home/${config.home.username}/${file}\"") [
".local/share/clipman.json"
".local/state/lesshst" # I don't need less search history to persist across boots...
".Xauthority"
".sqlite_history"
".local/share/krunnerstaterc"
".local/share/user-places.xbel.bak"
".local/share/user-places.xbel.tbcache"
".config/mimeapps.list"
".config/ncmpcpp/error.log"
".config/mozc/.server.lock"
".config/mozc/.session.ipc"
".config/mozc/.registry.db" # usage stats (seemingly disabled on my machine)
".config/looking-glass/imgui.ini"
".config/QtProject.conf"
".steampid"
".steampath"
".config/.xash_id"
".config/proton.conf"
".local/state/nvim/lsp.log" # this is never cleared...
".config/pavucontrol.ini"
] ++ builtins.map (dir: "e! \"/home/${config.home.username}/${dir}/\" - - - 60d") [
".cache"
".local/share/qalculate"
".local/share/nvfetcher"
".gradle"
".openjfx"
".mono"
".local/share/Trash"
".config/wireshark"
".config/qt5ct"
".config/procps"
".config/neofetch"
".config/matplotlib"
".local/share/arti"
# I use this dir as dumping grounds for random stuff
"tmp"
# games stuff
".local/share/vulkan"
".steam"
".paradoxlauncher"
".local/share/StardewValley" # only logs here
".local/share/GOG.com"
".local/share/Paradox Interactive/launcher-v2"
# faf
".com.faforever.client.FafClientApplication"
".org.testfx.toolkit.PrimaryStageApplication"
".faforever/logs"
# whatever this is (has a single file named cookie)
".config/pulse"
# Nextcloud logs
".config/Nextcloud/logs"
".local/share/Nextcloud"
# this might seem useful, but it's only for temporary dbus files actually
".config/fcitx"
".config/ibus"
# fcitx themes (come on would I ever theme something non-declaratively)
".local/share/fcitx5"
# RGB tooling that I barely use
".config/OpenRGB"
".config/ario"
# I don't use Firefox, I use Librewolf
".mozilla"
# dev stuff
".local/share/tvix"
".cargo"
".npm"
# just when I thought ~ pollution couldn't get worse...
"go"
# android studio and related
".local/share/android"
".local/share/Google"
".java"
".local/share/Sentry"
".android/cache"
".m2"
# chromium
".config/chromium"
".config/cef_user_data"
".pki"
# a lib used by glow
".local/share/charm"
# I barely use FreeCAD, don't need its files
".config/FreeCAD"
".local/share/FreeCAD"
# some useless gui config
".config/gtk-2.0"
".config/gtk-3.0"
".config/kde.org"
# QtWebEngine cache
".local/share/Anki"
# kde connect contacts
".local/share/kpeoplevcard"
# repl history
".local/share/nix"
# iwctl history
".local/share/iwctl"
# non-home-manager-managed files
".local/share/applications"
".local/share/icons"
".local/share/mime"
".config/autostart"
# logs
".local/share/xorg"
# if I forgot it, it probably wasn't important
"Downloads"
] ++ builtins.map (dir: "x \"/home/${config.home.username}/${dir}/\"") [
# WHY DOES THIS KEEP PART OF THE CONFIG
".cache/keepassxc"
2024-07-13 05:33:43 +07:00
]);
2023-01-24 02:24:40 +07:00
home.packages = with pkgs; [
rclone sshfs fuse
file jq python3Full killall
2024-07-13 05:33:43 +07:00
comma nix-output-monitor
unzip p7zip unrar-wrapper
2024-07-13 05:33:43 +07:00
] ++ lib.optionals (!config.minimal) [
appimage-run
2023-01-24 02:24:40 +07:00
];
}