Files
nixos-blueprint/modules/users/user/programs.nix
T
2025-12-31 15:03:16 +02:00

243 lines
7.0 KiB
Nix

{
config,
lib,
osConfig,
perSystem,
flake,
pkgs,
...
}: let
inherit (lib) mkIf;
inherit (osConfig.virtualisation) libvirtd;
inherit (osConfig.hardware) bluetooth;
in {
imports = with flake.homeModules; [
programs
];
systemd.user.settings.Manager.DefaultEnvironment = {
TERMINAL = "wezterm";
HISTFILE = ''"$XDG_STATE_HOME"/bash/history'';
CARGO_HOME = ''"$XDG_DATA_HOME"/cargo'';
DOTNET_CLI_HOME = ''"$XDG_DATA_HOME"/dotnet'';
GNUPGHOME = ''"$XDG_DATA_HOME"/gnupg'';
ICEAUTHORITY = ''"$XDG_CACHE_HOME"/ICEauthority'';
NUGET_PACKAGES = ''"$XDG_CACHE_HOME"/NuGetPackages'';
NPM_CONFIG_INIT_MODULE = ''"$XDG_CONFIG_HOME"/npm/config/npm-init.js'';
NPM_CONFIG_CACHE = ''"$XDG_CACHE_HOME"/npm'';
# NPM_CONFIG_TMP = ''"$XDG_RUNTIME_DIR"/npm'';
};
programs =
lib.attrsets.recursiveUpdate
{
atuin.enable = true;
fish.enable = true; # friendly interactive shell in rust
oh-my-posh.enable = true;
helix.enable = true;
yazi.enable = true;
wezterm.enable = true;
ghostty.enable = true;
bat.enable = true; # cat in rust
btop.enable = true;
# direnv.enable = true;
distrobox.enable = true;
difftastic.enable = true;
eza.enable = true; # ls in rust
fd.enable = true; # find in rust
fzf.enable = true; # fuzzy finder in rust
git.enable = true;
gitui.enable = true; # git ui in rust
jujutsu.enable = true; # vcs in rust
keychain.enable = true;
nix-index-database.comma.enable = true;
nix-index.enable = true;
nix-your-shell.enable = true;
obsidian.enable = true;
pay-respects.enable = true; # thefuck in rust
ripgrep.enable = true; # grep in rust
zellij.enable = true;
zk.enable = true;
zoxide.enable = true; # fuzzy cd in rust
}
{
btop.settings.update_ms = 200;
btop.package = pkgs.btop-rocm;
difftastic.git.enable = true;
difftastic.git.diffToolMode = true;
helix.defaultEditor = true;
git.signing.format = "ssh";
git.settings.alias.cl = "clone";
git.settings.alias.co = "checkout";
keychain.keys = ["id_ed25519"];
obsidian.package = perSystem.mypackages.obsidian-bwrapped.override {
bwrapperOpts = {
sockets.x11 = false;
mounts.readWrite = [
"$HOME/Obsidian"
];
};
};
# obsidian.vaults = {
# personal.target = "Obsidian/Personal";
# university.target = "Obsidian/University";
# };
};
home.packages = with pkgs;
[
# development utils
alejandra # nix formatter in rust
# devenv # programming deps in rust
(mkIf config.programs.jujutsu.enable jj-fzf) # fuzzy finder jujutsu tui
just # make in rust
silicon # create code pics in rust
]
++ [
# console utils
# bluetuith # bluetooth tui in go
dua # disk space usage in rust
duf # better df in go
fend # calculator in rust
# mprocs # process runner in rust
ouch # archive manager in rust
# procs # ps in rust
rbw # bitwarden cli in rust
sd # sed in rust
systemctl-tui # systemctl tui in rust
trashy # trash cli in rust
up # ultimate plumber in go
(perSystem.mypackages.prismlauncher-bwrapped.override {
addPkgs = with pkgs; [mangohud gamemode gamescope glfw3-minecraft];
packageOverrides = {
jdks = with pkgs; [
# graalvmPackages.graalvm-ce
# zulu8
zulu17
zulu
];
};
})
(perSystem.mypackages.zen-browser-bwrapped.override {
bwrapperOpts = {
sockets.x11 = false;
};
})
(perSystem.mypackages.legcord-bwrapped.override {
bwrapperOpts = {
sockets.x11 = false;
};
})
(perSystem.mypackages.helium-browser-bwrapped.override {
bwrapperOpts = {
sockets.x11 = false;
mounts.readWrite = [
# "$XDG_DOCUMENTS_DIR"
"$XDG_DOWNLOAD_DIR"
# "$XDG_MUSIC_DIR"
# "$XDG_VIDEOS_DIR"
# "$XDG_PICTURES_DIR"
];
};
})
(pkgs.mkBwrapper rec {
app = {
addPkgs = with pkgs; [mangohud gamemode gamescope];
package = pkgs.heroic.override {
extraPkgs = pkgs: app.addPkgs;
};
id = "com.heroicgameslauncher.hgl_bwrapper";
runScript = "heroic";
# isFhsenv = true;
};
dbus.session.talks = [
"com.canonical.Unity"
"org.freedesktop.Notifications"
"org.freedesktop.PowerManagement"
"org.freedesktop.ScreenSaver"
"org.gnome.SettingsDaemon.MediaKeys"
"org.kde.StatusNotifierWatcher"
];
dbus.system.talks = [
"org.freedesktop.UDisks2"
"org.freedesktop.UPower"
];
mounts.readWrite = [
"/storage/games/heroic"
"$HOME/.config/wine-tools"
];
mounts.read = [
"$XDG_CONFIG_HOME/mangohud"
];
})
]
++ [
(pkgs.writeShellApplication {
name = "rbw-ls";
runtimeInputs = with pkgs; [rbw jq csvlens];
text = ''
rbw ls --raw \
| jq -r '["name","user","folder","id"],
( .[] | [(.name // "none"), (.user // "none"), (.folder // "none"), .id])
| @csv' \
| csvlens
'';
})
(pkgs.writeShellApplication {
name = "rbw-get";
runtimeInputs = with pkgs; [rbw wl-clipboard];
text = ''rbw get --clipboard "$1" && sleep 5 && wl-copy -c'';
})
(pkgs.writeShellApplication {
name = "rbw-totp";
runtimeInputs = with pkgs; [rbw wl-clipboard];
text = ''rbw totp --clipboard "$1" && sleep 5 && wl-copy -c'';
})
]
++ [
# misc apps
adwaita-icon-theme
# vial # qmk keyboard configuring app
pinentry-qt # pinentry for rbw
(mkIf libvirtd.enable virt-manager) # libvirt gui
# waycheck # check wayland protocols
gpu-screen-recorder-gtk
]
++ [
# gui libadwaita apps
celluloid # mpv gui in libadwaita
# gnome-text-editor
helvum # pipewire patchbay in rust
# junction # app chooser
mission-center # task manager in rust (partly)
(mkIf bluetooth.enable overskride) # bluetooth gui in rust
pika-backup # borg gui in rust
pwvucontrol # pipewire gui in rust
perSystem.zmx.default
# sonusmix # pipewire routing tool in rust
];
xdg.systemDirs.data = ["/home/user/.bwrapper/helium/local/share"];
# xdg.desktopEntries.uni = {
# actions."Copy".exec = "fish -c \"~/.local/bin/uni --copy\"";
# categories = ["Utility" "X-Launch" "Network"];
# comment = "Select and open or copy URLs from a list.";
# exec = "fish -c \"~/.local/bin/uni\"";
# icon = "web-browser";
# name = "Uni URL Handler";
# startupNotify = true;
# terminal = false;
# type = "Application";
# };
}