{
pkgs,
sysLib,
grades,
snap-sync,
system,
flake_update,
...
}:
with pkgs; let
snap-sync-pkgs = pkgs.writeShellScriptBin "snap-sync" (builtins.readFile "${snap-sync}/bin/snap-sync");
shell-scripts = (import ./scripts.nix) {inherit pkgs sysLib;};
Gui = {
Terminals = [
# foot # wayland native terminal
alacritty # default terminal
];
Browsers = [
#ungoogled-chromium # web browser (only for web programming)
#brave
];
ImageManipulation = [
#krita # new, and better (KDE)
#gimp # conservative, and old (GNOME)
];
Social = [
mumble # voice chat software (client)
lutris # multiple game store clients
# nheko # best matrix client (as of today)
# element-desktop # nheko didn't work
signal-desktop # to avoid encryption problems with signal-bridge
];
Misc = [
#kalzium # Periodic Table of Elements (`element` is [sort of] better)
keepassxc # password manager
#onlykey # OnlyKey Chrome Desktop App
anki-bin # spaced repetition
];
};
TuiCli = {
EyeCandy = [
#banner # Print large banners to ASCII terminals
cmatrix # A curses-based scrolling 'Matrix'-like screen
hyfetch # Neofetch with LGBTQ pride flags.
];
Social = [
iamb # best tui matrix client (as of today)
];
Misc = [
android-file-transfer # Android MTP client with minimalistic UI
#xdg-ninja # A shell script which checks your $HOME for unwanted files and directories.
xdg-utils # open urls and such things
yokadi # Command line oriented, sqlite powered, todo list
killall # kill a application by name
];
WM = {
river = [river]; # A dynamic tiling wayland compositor
CLITools = [
lswt # List Wayland toplevels
wl-clipboard # Command-line copy/paste utilities
swaylock # lockscreen
];
Media = [
wf-recorder # Screen recorder
libnotify # a command to send a notification
];
};
Media = {
View = [
imv # Image viewer
];
Listen = [
pulseaudio # set the volume with pactl
ncmpc # mpd player client
mpc-cli # a cli mpd client
];
};
Hardware = {
Storage = [
#compsize # Calculate compression ratio of a set of files on Btrfs
# TODO: smartmontools # Control and monitor S.M.A.R.T. enabled ATA and SCSI Hard Drives
];
Input = [
#piper # GTK application to configure gaming mice
];
Printer = [
# TODO: sane-airscan # SANE - SANE backend for AirScan (eSCL) and WSD document scanners
];
};
FileListers = [
tree # A directory listing program displaying a depth indented list of files
fd # Simple, fast and user-friendly alternative to find
ripgrep # A search tool that combines the usability of ag with the raw speed of grep
fzf # used to quickly move around with its keybindings
];
Editors = [
ed # A POSIX-compliant line-oriented text editor
#sed # GNU stream editor
vim # The original ex/vi text editor (this is `vim` and not `vi`, as `vi` is unfree)
#neovim # Fork of Vim aiming to improve user experience, plugins, and GUIs
];
Programming = {
GeneralTools = [
git # the fast distributed version control system
git-crypt # mostly here to avoid problems in repositories, where the flake can't be loaded
glow # Command-line markdown renderer
];
};
};
# TODO: unmaintained, find sth else:
# handlr # Powerful alternative to xdg-utils written in Rust
mapFun = x:
if builtins.isAttrs x
then
if lib.isDerivation x
then [x]
else builtins.attrValues x
else [x];
in {
home.packages =
[
snap-sync-pkgs
flake_update.outputs.packages.${system}.default
grades.outputs.packages.${system}.default
]
++ shell-scripts
++ (with builtins;
concatLists
(concatLists [
(concatMap mapFun
(concatMap mapFun
(concatMap mapFun
(concatMap mapFun
(concatMap mapFun
(concatMap mapFun
(attrValues Gui)))))))
(concatMap mapFun
(concatMap mapFun
(concatMap mapFun
(concatMap mapFun
(concatMap mapFun
(concatMap mapFun
(attrValues TuiCli)))))))
]));
}