feat: complete and visually audit the Hyprland workstation
Refresh system/tool pins, install official Element Nightly, expand development tools, and finish desktop workflows with a shared charcoal/gold design. Retain host-specific updates and NixOS recovery generations.
This commit is contained in:
@@ -1,40 +1,209 @@
|
||||
{ pkgs, ... }:
|
||||
{ inputs, pkgs, ... }:
|
||||
|
||||
let
|
||||
c = import ./colors.nix;
|
||||
# Standalone tools from the fast-moving pin, NOT an overlay of the system's
|
||||
# Python/GCC/libraries. Desktop, drivers and NixOS services remain coherent.
|
||||
latest = import inputs.nixpkgs-latest {
|
||||
inherit (pkgs.stdenv.hostPlatform) system;
|
||||
config = pkgs.config;
|
||||
};
|
||||
in
|
||||
{
|
||||
programs.git.enable = true;
|
||||
programs.git = {
|
||||
enable = true;
|
||||
package = latest.git;
|
||||
lfs.enable = true;
|
||||
lfs.package = latest.git-lfs;
|
||||
};
|
||||
programs.zsh.enable = true;
|
||||
# Native module supplies rootless mappings/networking. No Docker daemon,
|
||||
# docker-group access, public API socket, containers or images on activation.
|
||||
virtualisation.podman.enable = true;
|
||||
# Mason's upstream Linux executables expect a conventional dynamic loader.
|
||||
programs.nix-ld.enable = true;
|
||||
|
||||
environment.systemPackages = with pkgs; [
|
||||
nixfmt
|
||||
# Overridden in common.nix to stay current beyond stable release lag.
|
||||
environment.systemPackages = [
|
||||
pkgs.nixfmt
|
||||
]
|
||||
++ (with latest; [
|
||||
pi-coding-agent
|
||||
# Runtime build prerequisites for the unchanged Lazy/Mason plugin workflow.
|
||||
|
||||
# Native builds and the unchanged Lazy/Mason runtime prerequisites.
|
||||
gcc
|
||||
gnumake
|
||||
pkg-config
|
||||
cmake
|
||||
ninja
|
||||
meson
|
||||
ccache
|
||||
python3
|
||||
nodejs
|
||||
lua5_1
|
||||
luajitPackages.luarocks
|
||||
clang-tools
|
||||
gdb
|
||||
lldb
|
||||
valgrind
|
||||
heaptrack
|
||||
rr
|
||||
elfutils
|
||||
bpftrace
|
||||
|
||||
# Language toolchains, testing and dependency/security audits.
|
||||
rustc
|
||||
cargo
|
||||
rustfmt
|
||||
clippy
|
||||
rust-analyzer
|
||||
cargo-nextest
|
||||
cargo-audit
|
||||
cargo-deny
|
||||
cargo-expand
|
||||
cargo-edit
|
||||
go
|
||||
gopls
|
||||
delve
|
||||
golangci-lint
|
||||
uv
|
||||
ruff
|
||||
pyright
|
||||
pnpm
|
||||
typescript
|
||||
biome
|
||||
bun
|
||||
deno
|
||||
# JVM, .NET, Ruby/PHP, Zig and BEAM: project versions still belong in devShells.
|
||||
jdk25
|
||||
maven
|
||||
gradle_9
|
||||
kotlin
|
||||
dotnet-sdk_10
|
||||
ruby
|
||||
bundler
|
||||
php
|
||||
phpPackages.composer
|
||||
zig
|
||||
zls
|
||||
beamPackages.elixir
|
||||
beamPackages.erlang
|
||||
protobuf
|
||||
buf
|
||||
shellcheck
|
||||
shfmt
|
||||
just
|
||||
hyperfine
|
||||
watchexec
|
||||
tokei
|
||||
yamllint
|
||||
actionlint
|
||||
pre-commit
|
||||
dprint
|
||||
stylua
|
||||
taplo
|
||||
marksman
|
||||
markdownlint-cli2
|
||||
sqlfluff
|
||||
hadolint
|
||||
ast-grep
|
||||
ripgrep-all
|
||||
|
||||
# Version control: no invented identity, login or credentials.
|
||||
gh
|
||||
glab
|
||||
git-absorb
|
||||
git-filter-repo
|
||||
difftastic
|
||||
jujutsu
|
||||
|
||||
# Nix introspection and development; never replace the system Nix daemon.
|
||||
nix-output-monitor
|
||||
nvd
|
||||
nix-tree
|
||||
nix-diff
|
||||
statix
|
||||
deadnix
|
||||
nixd
|
||||
nixpkgs-review
|
||||
|
||||
# Shell, structured data, file navigation and documentation.
|
||||
ripgrep
|
||||
fd
|
||||
eza
|
||||
jq
|
||||
yq-go
|
||||
jless
|
||||
sd
|
||||
tree
|
||||
file
|
||||
hexyl
|
||||
parallel
|
||||
moreutils
|
||||
tealdeer
|
||||
zellij
|
||||
miller
|
||||
csvlens
|
||||
sqlite
|
||||
duckdb
|
||||
pgcli
|
||||
litecli
|
||||
redis
|
||||
|
||||
# HTTP/API clients. Packet-level tools belong in network.nix.
|
||||
curl
|
||||
wget
|
||||
file
|
||||
tree
|
||||
xh
|
||||
grpcurl
|
||||
websocat
|
||||
hurl
|
||||
oha
|
||||
step-cli
|
||||
mkcert # Installed only: no CA is created or trusted automatically.
|
||||
|
||||
# Cloud, containers and orchestration: clients only, no live infrastructure.
|
||||
awscli2
|
||||
skopeo
|
||||
buildah
|
||||
podman-compose
|
||||
dive
|
||||
kubectl
|
||||
kubernetes-helm
|
||||
k9s
|
||||
kubectx
|
||||
stern
|
||||
kustomize
|
||||
opentofu
|
||||
ansible
|
||||
|
||||
# Encryption, secret scanning, backup and transfer. No automatic jobs or keys.
|
||||
age
|
||||
sops
|
||||
gnupg
|
||||
gitleaks
|
||||
trivy
|
||||
cosign
|
||||
syft
|
||||
grype
|
||||
restic
|
||||
rclone
|
||||
rsync
|
||||
mosh
|
||||
sshfs
|
||||
openssl
|
||||
unzip
|
||||
zip
|
||||
p7zip
|
||||
rsync
|
||||
openssl
|
||||
zstd
|
||||
lz4
|
||||
|
||||
# Logs, storage, process and hardware diagnosis. No extra privileges granted.
|
||||
dust
|
||||
duf
|
||||
ncdu
|
||||
procs
|
||||
sysstat
|
||||
iotop
|
||||
lnav
|
||||
lsof
|
||||
strace
|
||||
psmisc
|
||||
@@ -45,7 +214,19 @@ in
|
||||
lm_sensors
|
||||
man-pages
|
||||
man-pages-posix
|
||||
];
|
||||
|
||||
# Media/document tooling and rich Yazi previews.
|
||||
ffmpeg
|
||||
imagemagick
|
||||
mediainfo
|
||||
exiftool
|
||||
poppler-utils
|
||||
pandoc
|
||||
yt-dlp
|
||||
chafa
|
||||
asciinema
|
||||
vhs
|
||||
]);
|
||||
|
||||
fonts.packages = [ pkgs.nerd-fonts.jetbrains-mono ];
|
||||
fonts.fontconfig.defaultFonts.monospace = [ "JetBrainsMono Nerd Font" ];
|
||||
@@ -57,6 +238,43 @@ in
|
||||
settings.user.useConfigOnly = true;
|
||||
};
|
||||
|
||||
programs.delta = {
|
||||
enable = true;
|
||||
package = latest.delta;
|
||||
enableGitIntegration = true;
|
||||
options = {
|
||||
navigate = true;
|
||||
line-numbers = true;
|
||||
};
|
||||
};
|
||||
programs.lazygit = {
|
||||
enable = true;
|
||||
package = latest.lazygit;
|
||||
settings.gui = {
|
||||
nerdFontsVersion = "3";
|
||||
showRandomTip = false;
|
||||
};
|
||||
};
|
||||
programs.direnv = {
|
||||
enable = true;
|
||||
package = latest.direnv;
|
||||
enableZshIntegration = true;
|
||||
nix-direnv = {
|
||||
enable = true;
|
||||
package = latest.nix-direnv;
|
||||
};
|
||||
# Deliberately no whitelist: each project's .envrc needs `direnv allow`.
|
||||
};
|
||||
programs.tmux = {
|
||||
enable = true;
|
||||
package = latest.tmux;
|
||||
terminal = "tmux-256color";
|
||||
mouse = true;
|
||||
keyMode = "vi";
|
||||
historyLimit = 50000;
|
||||
escapeTime = 10;
|
||||
};
|
||||
|
||||
programs.zsh = {
|
||||
enable = true;
|
||||
enableCompletion = true;
|
||||
@@ -86,6 +304,7 @@ in
|
||||
programs.fzf = {
|
||||
enable = true;
|
||||
enableZshIntegration = true;
|
||||
package = latest.fzf;
|
||||
defaultCommand = "fd --type f --hidden --exclude .git";
|
||||
fileWidgetCommand = "fd --type f --hidden --exclude .git";
|
||||
changeDirWidgetCommand = "fd --type d --hidden --exclude .git";
|
||||
@@ -103,7 +322,7 @@ in
|
||||
hl = c.cyan;
|
||||
"hl+" = c.cyan;
|
||||
border = c.border;
|
||||
prompt = c.blue;
|
||||
prompt = c.accent;
|
||||
pointer = c.purple;
|
||||
marker = c.green;
|
||||
info = c.muted;
|
||||
@@ -112,11 +331,12 @@ in
|
||||
|
||||
programs.starship = {
|
||||
enable = true;
|
||||
package = latest.starship;
|
||||
settings = {
|
||||
add_newline = true;
|
||||
format = "$username$hostname$directory$git_branch$git_status$nix_shell$cmd_duration\n$character";
|
||||
directory = {
|
||||
style = "bold ${c.blue}";
|
||||
style = "bold ${c.accent}";
|
||||
truncation_length = 4;
|
||||
truncation_symbol = "…/";
|
||||
read_only = " [read-only]";
|
||||
@@ -143,14 +363,17 @@ in
|
||||
|
||||
programs.zoxide = {
|
||||
enable = true;
|
||||
package = latest.zoxide;
|
||||
enableZshIntegration = true;
|
||||
};
|
||||
programs.bat = {
|
||||
enable = true;
|
||||
package = latest.bat;
|
||||
config.theme = "base16";
|
||||
};
|
||||
programs.btop = {
|
||||
enable = true;
|
||||
package = latest.btop;
|
||||
settings = {
|
||||
theme_background = false;
|
||||
rounded_corners = true;
|
||||
@@ -159,6 +382,7 @@ in
|
||||
};
|
||||
programs.yazi = {
|
||||
enable = true;
|
||||
package = latest.yazi;
|
||||
enableZshIntegration = true;
|
||||
settings.mgr = {
|
||||
show_hidden = true;
|
||||
@@ -171,10 +395,10 @@ in
|
||||
enable = true;
|
||||
font = {
|
||||
name = "JetBrainsMono Nerd Font";
|
||||
size = 13;
|
||||
size = 12;
|
||||
};
|
||||
settings = {
|
||||
window_padding_width = 14;
|
||||
window_padding_width = 10;
|
||||
background_opacity = "1.0";
|
||||
hide_window_decorations = true;
|
||||
scrollback_lines = 20000;
|
||||
@@ -186,9 +410,9 @@ in
|
||||
background = c.background;
|
||||
cursor = c.cyan;
|
||||
selection_foreground = c.text;
|
||||
selection_background = "#354562";
|
||||
selection_background = c.selection;
|
||||
url_color = c.blue;
|
||||
active_border_color = c.blue;
|
||||
active_border_color = c.accent;
|
||||
inactive_border_color = c.border;
|
||||
color0 = c.surface;
|
||||
color1 = c.red;
|
||||
@@ -197,14 +421,14 @@ in
|
||||
color4 = c.blue;
|
||||
color5 = c.purple;
|
||||
color6 = c.cyan;
|
||||
color7 = "#dde1e6";
|
||||
color7 = c.text;
|
||||
color8 = c.muted;
|
||||
color9 = "#ff99a0";
|
||||
color10 = "#6fdc8c";
|
||||
color11 = "#f7d75c";
|
||||
color12 = "#a6c8ff";
|
||||
color13 = "#d4bbff";
|
||||
color14 = "#82e9de";
|
||||
color9 = "#eda692";
|
||||
color10 = "#b8c992";
|
||||
color11 = "#e6ca91";
|
||||
color12 = "#a7c2c8";
|
||||
color13 = "#c9b9d1";
|
||||
color14 = "#adcbb7";
|
||||
color15 = c.text;
|
||||
};
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user