Files
nixos-blueprint/modules/users/user/programs.nix
T
2026-04-24 15:26:04 +03:00

250 lines
7.5 KiB
Nix

{
config,
lib,
osConfig,
perSystem,
flake,
pkgs,
...
}: let
inherit (lib) mkIf;
inherit (osConfig.virtualisation) libvirtd;
inherit (osConfig.hardware) bluetooth;
in {
imports = with flake.modules.homePrograms; [
atuin
direnv
fish
helix
oh-my-posh
syncthing
wezterm
wl-kbptr
yazi
zed-editor
];
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
{
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";
git.settings.sequence.editor = lib.getExe pkgs.git-interactive-rebase-tool;
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 (broken)
just # make in rust
silicon # create code pics in rust
]
++ [
# console utils
# bluetuith # bluetooth tui in go
codex # openai coding agent in rust
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
wiremix # pavucontrol for wireplumber in rust
]
++ [
# various wrappers
# (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;
bwrapperOpts.mounts.readWrite = ["$XDG_DOWNLOAD_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 = "bw-get";
runtimeInputs = with pkgs; [bitwarden-cli jq wl-clipboard csvlens];
text = ''
bw get item \
"$(bw list items \
| jq -r '["name","user","id"], (.[] | [(.name), (.login.username), (.id)]) | @csv' \
| csvlens)" \
| jq -r '.login.password' \
| wl-copy \
&& 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
appimage-run
adwaita-icon-theme
# vial # qmk keyboard configuring app
pinentry-gnome3 # 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
crosspipe # replacing helvum
# 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";
# };
}