feat(home): theme CLI tools, add staples, env defaults and mime apps
- Catppuccin Mocha for fzf (colors), bat (catppuccin/bat tmTheme) and git delta (syntax-theme + navigate/line-numbers/side-by-side). - CLI staples on every host: ripgrep, fd, jq, btop, plus gh (SSH) and tea (Gitea CLI). - home.sessionVariables: PAGER, MANPAGER (bat), VISUAL; xdg.enable. - xdg.mimeApps defaults (web->Firefox, directories->nemo). - Document the stateVersion pin. README updated. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -34,6 +34,18 @@
|
|||||||
url = "github:nix-community/nix-index-database";
|
url = "github:nix-community/nix-index-database";
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
};
|
};
|
||||||
|
# treefmt-nix: one multi-language formatter driving `nix fmt` and the
|
||||||
|
# formatting flake check (nixfmt + shfmt + prettier).
|
||||||
|
treefmt-nix = {
|
||||||
|
url = "github:numtide/treefmt-nix";
|
||||||
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
|
};
|
||||||
|
# git-hooks.nix: declarative pre-commit hooks (nixfmt/deadnix/statix),
|
||||||
|
# installed into the repo via the devShell.
|
||||||
|
git-hooks = {
|
||||||
|
url = "github:cachix/git-hooks.nix";
|
||||||
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
outputs =
|
outputs =
|
||||||
@@ -53,7 +65,7 @@
|
|||||||
let
|
let
|
||||||
# claude-code tracks nixpkgs-unstable regardless of the pinned nixpkgs.
|
# claude-code tracks nixpkgs-unstable regardless of the pinned nixpkgs.
|
||||||
overlays = [
|
overlays = [
|
||||||
(final: prev: {
|
(_final: prev: {
|
||||||
claude-code =
|
claude-code =
|
||||||
(import nixpkgs-unstable {
|
(import nixpkgs-unstable {
|
||||||
inherit (prev.stdenv.hostPlatform) system;
|
inherit (prev.stdenv.hostPlatform) system;
|
||||||
@@ -245,7 +257,7 @@
|
|||||||
];
|
];
|
||||||
homeModules = [
|
homeModules = [
|
||||||
./lyrathorpe/home
|
./lyrathorpe/home
|
||||||
./system/modules/work/default.nix
|
./lyrathorpe/home/work.nix
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
@@ -268,6 +280,13 @@
|
|||||||
};
|
};
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
|
# flake-parts modules: treefmt-nix wires `nix fmt` + a formatting check;
|
||||||
|
# git-hooks.nix wires the pre-commit check + devShell installation script.
|
||||||
|
imports = [
|
||||||
|
inputs.treefmt-nix.flakeModule
|
||||||
|
inputs.git-hooks.flakeModule
|
||||||
|
];
|
||||||
|
|
||||||
systems = [
|
systems = [
|
||||||
"x86_64-linux"
|
"x86_64-linux"
|
||||||
"aarch64-linux"
|
"aarch64-linux"
|
||||||
@@ -279,26 +298,60 @@
|
|||||||
# nixpkgs instance for that system. Outputs here become per-system
|
# nixpkgs instance for that system. Outputs here become per-system
|
||||||
# attrsets automatically (e.g. devShells.<system>.default).
|
# attrsets automatically (e.g. devShells.<system>.default).
|
||||||
perSystem =
|
perSystem =
|
||||||
{ pkgs, ... }:
|
{ config, pkgs, ... }:
|
||||||
{
|
{
|
||||||
# `nix fmt` formatter for the repo.
|
# treefmt drives `nix fmt` and the formatting check below. nixfmt
|
||||||
formatter = pkgs.nixfmt;
|
# stays the .nix formatter (the tree is already nixfmt-formatted);
|
||||||
|
# shfmt covers shell and prettier covers markdown/yaml/json.
|
||||||
|
treefmt = {
|
||||||
|
projectRootFile = "flake.nix";
|
||||||
|
programs.nixfmt.enable = true;
|
||||||
|
programs.shfmt.enable = true;
|
||||||
|
programs.prettier.enable = true;
|
||||||
|
# Generated hardware-configuration.nix files are not hand-edited.
|
||||||
|
settings.global.excludes = [ "*/hardware-configuration.nix" ];
|
||||||
|
};
|
||||||
|
|
||||||
|
# Pre-commit hooks: format + lint gate run on commit. The same hooks
|
||||||
|
# are exposed as a flake check (pre-commit.check.enable defaults true).
|
||||||
|
pre-commit.settings.hooks = {
|
||||||
|
nixfmt-rfc-style.enable = true;
|
||||||
|
deadnix = {
|
||||||
|
enable = true;
|
||||||
|
# Unused module args ({config,lib,pkgs,...}) are normal; only flag
|
||||||
|
# genuinely dead bindings.
|
||||||
|
settings.noLambdaPatternNames = true;
|
||||||
|
};
|
||||||
|
statix.enable = true; # reads .statix.toml (repeated_keys/empty_pattern disabled)
|
||||||
|
};
|
||||||
|
|
||||||
|
# treefmt-nix exposes its own `checks.treefmt`; alias it to
|
||||||
|
# `formatting` so the existing CI gate (.#checks.*.formatting) keeps
|
||||||
|
# working without churn.
|
||||||
|
checks.formatting = config.treefmt.build.check inputs.self;
|
||||||
|
|
||||||
|
# deadnix / statix lints as standalone flake checks so `nix flake
|
||||||
|
# check` flags dead code and antipatterns independently of pre-commit.
|
||||||
|
checks.deadnix = pkgs.runCommandLocal "check-deadnix" { nativeBuildInputs = [ pkgs.deadnix ]; } ''
|
||||||
|
deadnix --fail --no-lambda-pattern-names ${./.} && touch $out
|
||||||
|
'';
|
||||||
|
checks.statix = pkgs.runCommandLocal "check-statix" { nativeBuildInputs = [ pkgs.statix ]; } ''
|
||||||
|
statix check ${./.} && touch $out
|
||||||
|
'';
|
||||||
|
|
||||||
# `nix develop` shell with the tooling needed to hack on this flake.
|
# `nix develop` shell with the tooling needed to hack on this flake.
|
||||||
|
# shellHook installs the git pre-commit hooks into the working tree.
|
||||||
devShells.default = pkgs.mkShellNoCC {
|
devShells.default = pkgs.mkShellNoCC {
|
||||||
packages = with pkgs; [
|
packages = with pkgs; [
|
||||||
nixfmt
|
nixfmt
|
||||||
nil
|
nil
|
||||||
git
|
git
|
||||||
|
deadnix
|
||||||
|
statix
|
||||||
|
treefmt
|
||||||
];
|
];
|
||||||
|
shellHook = config.pre-commit.installationScript;
|
||||||
};
|
};
|
||||||
|
|
||||||
checks.formatting =
|
|
||||||
pkgs.runCommandLocal "check-formatting" { nativeBuildInputs = [ pkgs.nixfmt ]; }
|
|
||||||
''
|
|
||||||
# Generated hardware-configuration.nix files are excluded.
|
|
||||||
nixfmt --check $(find ${./.} -name '*.nix' -not -name 'hardware-configuration.nix') && touch $out
|
|
||||||
'';
|
|
||||||
};
|
};
|
||||||
|
|
||||||
# Realise the host tables: each entry becomes a {nixos,darwin}Configuration.
|
# Realise the host tables: each entry becomes a {nixos,darwin}Configuration.
|
||||||
|
|||||||
+21
-11
@@ -7,7 +7,7 @@ home-manager — edit the listed file and rebuild, never the generated dotfiles.
|
|||||||
Keyboard shortcuts have their own reference: [`KEYBINDINGS.md`](./KEYBINDINGS.md).
|
Keyboard shortcuts have their own reference: [`KEYBINDINGS.md`](./KEYBINDINGS.md).
|
||||||
|
|
||||||
| Area | Defined in |
|
| Area | Defined in |
|
||||||
| --- | --- |
|
| ------------------------------------- | ----------------------------------------------------- |
|
||||||
| zsh, CLI tools, tmux, ssh, auto-tmux | [`shell.nix`](./shell.nix) |
|
| zsh, CLI tools, tmux, ssh, auto-tmux | [`shell.nix`](./shell.nix) |
|
||||||
| git (+ delta, commitizen) | [`git.nix`](./git.nix) |
|
| git (+ delta, commitizen) | [`git.nix`](./git.nix) |
|
||||||
| vim | [`editor.nix`](./editor.nix) |
|
| vim | [`editor.nix`](./editor.nix) |
|
||||||
@@ -22,7 +22,7 @@ on top (work email, its own ssh config, extra packages).
|
|||||||
## zsh
|
## zsh
|
||||||
|
|
||||||
| Feature | Notes |
|
| Feature | Notes |
|
||||||
| --- | --- |
|
| ------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------ |
|
||||||
| oh-my-zsh | plugins `git`, `man`, `sudo` (Esc-Esc to prepend sudo), `colored-man-pages`, `extract`; theme `robbyrussell` |
|
| oh-my-zsh | plugins `git`, `man`, `sudo` (Esc-Esc to prepend sudo), `colored-man-pages`, `extract`; theme `robbyrussell` |
|
||||||
| Autosuggestion | fish-style history suggestions as you type (→ to accept) |
|
| Autosuggestion | fish-style history suggestions as you type (→ to accept) |
|
||||||
| Syntax highlighting | commands coloured by validity as you type |
|
| Syntax highlighting | commands coloured by validity as you type |
|
||||||
@@ -36,16 +36,26 @@ on top (work email, its own ssh config, extra packages).
|
|||||||
## CLI tools
|
## CLI tools
|
||||||
|
|
||||||
| Tool | What it gives you |
|
| Tool | What it gives you |
|
||||||
| --- | --- |
|
| ----------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||||
| `fzf` | `Ctrl-R` fuzzy history, `Ctrl-T` file picker, `Alt-C` fuzzy cd |
|
| `fzf` | `Ctrl-R` fuzzy history, `Ctrl-T` file picker, `Alt-C` fuzzy cd (Catppuccin-themed) |
|
||||||
| `zoxide` | `z <fragment>` jumps to frecent directories |
|
| `zoxide` | `z <fragment>` jumps to frecent directories |
|
||||||
| `direnv` + `nix-direnv` | per-project environments auto-loaded on `cd` (cached Nix dev shells) |
|
| `direnv` + `nix-direnv` | per-project environments auto-loaded on `cd` (cached Nix dev shells) |
|
||||||
| `eza` | modern `ls` (drives the ls aliases) |
|
| `eza` | modern `ls` (drives the ls aliases) |
|
||||||
| `bat` | syntax-highlighting pager; behaves like `cat` when piped |
|
| `bat` | syntax-highlighting pager (Catppuccin Mocha theme); behaves like `cat` when piped; also the `MANPAGER` |
|
||||||
|
| `ripgrep` / `fd` | fast search (`rg`) and find (`fd`); also back `fzf` |
|
||||||
|
| `jq` / `btop` | JSON processor; resource monitor |
|
||||||
|
| `gh` / `tea` | GitHub and Gitea (`code.emmathe.dev`) CLIs; `gh` uses SSH |
|
||||||
| `nix-index` | `command-not-found`: an unknown command tells you which Nix package provides it (prebuilt DB, no manual indexing) |
|
| `nix-index` | `command-not-found`: an unknown command tells you which Nix package provides it (prebuilt DB, no manual indexing) |
|
||||||
| `comma` (`,`) | run an uninstalled program once: `, cowsay hi` |
|
| `comma` (`,`) | run an uninstalled program once: `, cowsay hi` |
|
||||||
| `nh` | nicer `nixos-rebuild`/`home-manager` with diffs; `$NH_FLAKE` set to the repo. No scheduled GC (it could reap paths a running generation still references) — collect garbage manually with `nh clean all` / `nix-collect-garbage -d` |
|
| `nh` | nicer `nixos-rebuild`/`home-manager` with diffs; `$NH_FLAKE` set to the repo. No scheduled GC (it could reap paths a running generation still references) — collect garbage manually with `nh clean all` / `nix-collect-garbage -d` |
|
||||||
|
|
||||||
|
**Theming:** `fzf`, `bat` and `git`'s `delta` pager are all Catppuccin Mocha,
|
||||||
|
driven from the shared `../catppuccin-mocha.nix` palette / the catppuccin/bat
|
||||||
|
theme.
|
||||||
|
|
||||||
|
**Env & defaults:** `xdg.enable` on; `PAGER`/`MANPAGER` (bat)/`VISUAL` set in
|
||||||
|
`default.nix`; `xdg.mimeApps` maps web→Firefox, directories→nemo (`desktop.nix`).
|
||||||
|
|
||||||
## tmux
|
## tmux
|
||||||
|
|
||||||
**Auto-start:** opening any interactive terminal — foot, iTerm2, the WSL shell, the
|
**Auto-start:** opening any interactive terminal — foot, iTerm2, the WSL shell, the
|
||||||
@@ -55,7 +65,7 @@ fire for SSH sessions, VS Code's integrated terminal, already-inside-tmux, or
|
|||||||
non-interactive shells. Escape hatch: `NO_TMUX=1 <terminal>` opens a bare shell.
|
non-interactive shells. Escape hatch: `NO_TMUX=1 <terminal>` opens a bare shell.
|
||||||
|
|
||||||
| Setting | Value |
|
| Setting | Value |
|
||||||
| --- | --- |
|
| -------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------ |
|
||||||
| Mode keys | vi |
|
| Mode keys | vi |
|
||||||
| Mouse | on |
|
| Mouse | on |
|
||||||
| Scrollback | 500000 lines |
|
| Scrollback | 500000 lines |
|
||||||
@@ -77,7 +87,7 @@ glyphs — see Fonts.
|
|||||||
**JetBrainsMono Nerd Font** is installed on every host (in `common-nixos.nix`,
|
**JetBrainsMono Nerd Font** is installed on every host (in `common-nixos.nix`,
|
||||||
because tmux runs everywhere; the Mac installs it to `/Library/Fonts` via the
|
because tmux runs everywhere; the Mac installs it to `/Library/Fonts` via the
|
||||||
Darwin config). foot uses it as its main font automatically. iTerm2's font is a
|
Darwin config). foot uses it as its main font automatically. iTerm2's font is a
|
||||||
GUI setting — set it to *JetBrainsMono Nerd Font* (Settings → Profiles → Text →
|
GUI setting — set it to _JetBrainsMono Nerd Font_ (Settings → Profiles → Text →
|
||||||
Font) so the tmux statusline glyphs render instead of `?`.
|
Font) so the tmux statusline glyphs render instead of `?`.
|
||||||
|
|
||||||
## git
|
## git
|
||||||
@@ -86,14 +96,14 @@ Pager is **delta**. **commitizen** is installed on every host; `cz` defaults to
|
|||||||
Conventional Commits.
|
Conventional Commits.
|
||||||
|
|
||||||
| Aliases | |
|
| Aliases | |
|
||||||
| --- | --- |
|
| ------------------------ | ----------------------------------------------------------------- |
|
||||||
| `st` `co` `sw` `br` `ci` | status / checkout / switch / branch / commit |
|
| `st` `co` `sw` `br` `ci` | status / checkout / switch / branch / commit |
|
||||||
| `last` `unstage` | last commit / unstage |
|
| `last` `unstage` | last commit / unstage |
|
||||||
| `lg` | graph log, all branches |
|
| `lg` | graph log, all branches |
|
||||||
| `cz` `cc` | `git cz <sub>` (e.g. `git cz c`) and `git cc` → commitizen prompt |
|
| `cz` `cc` | `git cz <sub>` (e.g. `git cz c`) and `git cc` → commitizen prompt |
|
||||||
|
|
||||||
| Behaviour | |
|
| Behaviour | |
|
||||||
| --- | --- |
|
| -------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
||||||
| Pulls | rebase, with autostash + autosquash |
|
| Pulls | rebase, with autostash + autosquash |
|
||||||
| Fetch | prune deleted remote branches |
|
| Fetch | prune deleted remote branches |
|
||||||
| Conflicts | `zdiff3` (shows the common ancestor) |
|
| Conflicts | `zdiff3` (shows the common ancestor) |
|
||||||
@@ -107,7 +117,7 @@ Conventional Commits.
|
|||||||
## ssh
|
## ssh
|
||||||
|
|
||||||
| Feature | Notes |
|
| Feature | Notes |
|
||||||
| --- | --- |
|
| ------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||||
| ssh-agent | runs on Linux (launchd on macOS); keys added on **first use** so the passphrase is typed once per login session — this also feeds git commit signing |
|
| ssh-agent | runs on Linux (launchd on macOS); keys added on **first use** so the passphrase is typed once per login session — this also feeds git commit signing |
|
||||||
| macOS | `UseKeychain` caches the passphrase in the login keychain (guarded by `IgnoreUnknown`, so a non-Apple `ssh` skips it instead of erroring) |
|
| macOS | `UseKeychain` caches the passphrase in the login keychain (guarded by `IgnoreUnknown`, so a non-Apple `ssh` skips it instead of erroring) |
|
||||||
| Gitea remote | `code.emmathe.dev` → `HostName 10.187.1.76` (DNS-override), `Port 30009`, user `git`, dedicated key, `identitiesOnly` |
|
| Gitea remote | `code.emmathe.dev` → `HostName 10.187.1.76` (DNS-override), `Port 30009`, user `git`, dedicated key, `identitiesOnly` |
|
||||||
@@ -127,7 +137,7 @@ forced off there) but still runs the agent.
|
|||||||
## Per-host differences
|
## Per-host differences
|
||||||
|
|
||||||
| | Personal Linux (sway) | macOS | Work WSL (EDaaS) |
|
| | Personal Linux (sway) | macOS | Work WSL (EDaaS) |
|
||||||
| --- | --- | --- | --- |
|
| --------------------------- | --------------------- | ----------------- | --------------------------- |
|
||||||
| Auto-tmux | yes (foot/TTY) | yes (iTerm2) | yes (WSL shell) |
|
| Auto-tmux | yes (foot/TTY) | yes (iTerm2) | yes (WSL shell) |
|
||||||
| git email | `iam@emmathe.dev` | `iam@emmathe.dev` | `…@citrix.com` (work) |
|
| git email | `iam@emmathe.dev` | `iam@emmathe.dev` | `…@citrix.com` (work) |
|
||||||
| ssh config managed | yes | yes | no (keeps corporate config) |
|
| ssh config managed | yes | yes | no (keeps corporate config) |
|
||||||
|
|||||||
@@ -9,5 +9,26 @@
|
|||||||
./editor.nix
|
./editor.nix
|
||||||
];
|
];
|
||||||
|
|
||||||
|
# Manage the XDG base-directory layout and ~/.config files. Tools above
|
||||||
|
# (bat themes, gh config, ...) write under xdg.configHome; enabling this
|
||||||
|
# makes the paths explicit and consistent across hosts. No regression: the
|
||||||
|
# defaults match the conventional ~/.config, ~/.cache, ~/.local/share.
|
||||||
|
xdg.enable = true;
|
||||||
|
|
||||||
|
# Editor itself comes from vim.defaultEditor (sets $EDITOR). Round out the
|
||||||
|
# rest of the standard env. desktop.nix adds its own Wayland session vars;
|
||||||
|
# home-manager merges the two attrsets, so these do not clash.
|
||||||
|
home.sessionVariables = {
|
||||||
|
VISUAL = "vim";
|
||||||
|
PAGER = "less -FRX"; # -F quit-if-one-screen, -R raw colour, -X no clear
|
||||||
|
# Render man pages through bat (themed): col strips backspace overstrike,
|
||||||
|
# bat -l man -p highlights without its own pager decorations.
|
||||||
|
MANPAGER = "sh -c 'col -bx | bat -l man -p'";
|
||||||
|
};
|
||||||
|
|
||||||
|
# Pinned to the release first installed on these hosts, NOT the current
|
||||||
|
# nixpkgs (26.05). stateVersion freezes stateful defaults (file locations,
|
||||||
|
# service data formats) to that release; bumping it silently migrates that
|
||||||
|
# state and can break it. Leave it -- it is intentional, not stale.
|
||||||
home.stateVersion = "25.05";
|
home.stateVersion = "25.05";
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -27,6 +27,30 @@
|
|||||||
XDG_CURRENT_DESKTOP = "sway";
|
XDG_CURRENT_DESKTOP = "sway";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
# Default apps for the desktop (writes ~/.config/mimeapps.list). Firefox owns
|
||||||
|
# the web; nemo owns directories/file URIs; images, PDFs and plain text open
|
||||||
|
# in Firefox too -- no dedicated GUI viewer/editor is installed and vim is
|
||||||
|
# terminal-only (no usable GUI .desktop for double-click handoff). Kept
|
||||||
|
# minimal -- only the handlers actually present on these hosts.
|
||||||
|
xdg.mimeApps = {
|
||||||
|
enable = true;
|
||||||
|
defaultApplications = {
|
||||||
|
"text/html" = "firefox.desktop";
|
||||||
|
"x-scheme-handler/http" = "firefox.desktop";
|
||||||
|
"x-scheme-handler/https" = "firefox.desktop";
|
||||||
|
"x-scheme-handler/about" = "firefox.desktop";
|
||||||
|
"x-scheme-handler/unknown" = "firefox.desktop";
|
||||||
|
"inode/directory" = "nemo.desktop";
|
||||||
|
"image/png" = "firefox.desktop";
|
||||||
|
"image/jpeg" = "firefox.desktop";
|
||||||
|
"image/gif" = "firefox.desktop";
|
||||||
|
"image/webp" = "firefox.desktop";
|
||||||
|
"image/svg+xml" = "firefox.desktop";
|
||||||
|
"application/pdf" = "firefox.desktop";
|
||||||
|
"text/plain" = "firefox.desktop";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
# Theme GTK apps (nemo, etc.) to match the Catppuccin Mocha desktop. Under
|
# Theme GTK apps (nemo, etc.) to match the Catppuccin Mocha desktop. Under
|
||||||
# Sway there is no XSettings daemon, so GTK reads these from the generated
|
# Sway there is no XSettings daemon, so GTK reads these from the generated
|
||||||
# ~/.config/gtk-{3,4}.0/settings.ini directly. The Mocha theme is dark by
|
# ~/.config/gtk-{3,4}.0/settings.ini directly. The Mocha theme is dark by
|
||||||
|
|||||||
@@ -37,6 +37,17 @@
|
|||||||
colorMoved = "default";
|
colorMoved = "default";
|
||||||
};
|
};
|
||||||
rerere.enabled = true; # remember + replay conflict resolutions
|
rerere.enabled = true; # remember + replay conflict resolutions
|
||||||
|
|
||||||
|
# delta pager config (programs.delta is enabled below, with git
|
||||||
|
# integration; these keys land under [delta] in the git config).
|
||||||
|
# syntax-theme reuses the Catppuccin Mocha tmTheme vendored for bat in
|
||||||
|
# shell.nix -- delta reads bat's theme directory.
|
||||||
|
delta = {
|
||||||
|
syntax-theme = "Catppuccin Mocha";
|
||||||
|
navigate = true; # n/N to jump between diff hunks
|
||||||
|
line-numbers = true;
|
||||||
|
side-by-side = true;
|
||||||
|
};
|
||||||
commit.verbose = true; # full diff in the commit-message editor
|
commit.verbose = true; # full diff in the commit-message editor
|
||||||
branch.sort = "-committerdate"; # most-recent branches first
|
branch.sort = "-committerdate"; # most-recent branches first
|
||||||
column.ui = "auto";
|
column.ui = "auto";
|
||||||
|
|||||||
@@ -5,6 +5,10 @@
|
|||||||
inputs,
|
inputs,
|
||||||
...
|
...
|
||||||
}:
|
}:
|
||||||
|
let
|
||||||
|
# Shared Catppuccin Mocha palette: raw 6-hex strings, no leading "#".
|
||||||
|
ctp = import ../catppuccin-mocha.nix;
|
||||||
|
in
|
||||||
{
|
{
|
||||||
imports = [
|
imports = [
|
||||||
# Prebuilt nix-index database -> working command-not-found
|
# Prebuilt nix-index database -> working command-not-found
|
||||||
@@ -12,6 +16,16 @@
|
|||||||
inputs.nix-index-database.homeModules.default
|
inputs.nix-index-database.homeModules.default
|
||||||
];
|
];
|
||||||
|
|
||||||
|
# CLI staples wanted on every host (search, parse, monitor). ripgrep/fd also
|
||||||
|
# back fzf and editor integrations; tea is the Gitea CLI for code.emmathe.dev.
|
||||||
|
home.packages = [
|
||||||
|
pkgs.ripgrep
|
||||||
|
pkgs.fd
|
||||||
|
pkgs.jq
|
||||||
|
pkgs.btop
|
||||||
|
pkgs.tea
|
||||||
|
];
|
||||||
|
|
||||||
programs.zsh = {
|
programs.zsh = {
|
||||||
enable = true;
|
enable = true;
|
||||||
enableCompletion = true;
|
enableCompletion = true;
|
||||||
@@ -99,6 +113,23 @@
|
|||||||
programs.fzf = {
|
programs.fzf = {
|
||||||
enable = true;
|
enable = true;
|
||||||
enableZshIntegration = true;
|
enableZshIntegration = true;
|
||||||
|
# Catppuccin Mocha colours (rendered into FZF_DEFAULT_OPTS --color). Each
|
||||||
|
# value needs a leading "#"; the palette stores raw hex.
|
||||||
|
colors = {
|
||||||
|
"bg" = "#${ctp.base}";
|
||||||
|
"bg+" = "#${ctp.surface1}"; # current line / selected row
|
||||||
|
"fg" = "#${ctp.text}";
|
||||||
|
"fg+" = "#${ctp.text}";
|
||||||
|
"hl" = "#${ctp.blue}"; # match highlights
|
||||||
|
"hl+" = "#${ctp.blue}";
|
||||||
|
"header" = "#${ctp.red}";
|
||||||
|
"info" = "#${ctp.mauve}";
|
||||||
|
"marker" = "#${ctp.green}";
|
||||||
|
"pointer" = "#${ctp.pink}";
|
||||||
|
"prompt" = "#${ctp.mauve}";
|
||||||
|
"spinner" = "#${ctp.pink}";
|
||||||
|
"border" = "#${ctp.surface1}";
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
# Frecency directory jumping: `z <fragment>`.
|
# Frecency directory jumping: `z <fragment>`.
|
||||||
@@ -120,8 +151,22 @@
|
|||||||
icons = "auto"; # boolean form is deprecated
|
icons = "auto"; # boolean form is deprecated
|
||||||
};
|
};
|
||||||
|
|
||||||
# Syntax-highlighting pager, used as `bat` (acts like cat when piped).
|
# Syntax-highlighting pager, used as `bat` (acts like cat when piped). bat
|
||||||
programs.bat.enable = true;
|
# ships no Catppuccin theme, so vendor the upstream tmTheme from catppuccin/bat
|
||||||
|
# (delta in git.nix reuses it as its syntax-theme).
|
||||||
|
programs.bat = {
|
||||||
|
enable = true;
|
||||||
|
config.theme = "Catppuccin Mocha";
|
||||||
|
themes."Catppuccin Mocha" = {
|
||||||
|
src = pkgs.fetchFromGitHub {
|
||||||
|
owner = "catppuccin";
|
||||||
|
repo = "bat";
|
||||||
|
rev = "6810349b28055dce54076712fc05fc68da4b8ec0";
|
||||||
|
sha256 = "1y5sfi7jfr97z1g6vm2mzbsw59j1jizwlmbadvmx842m0i5ak5ll";
|
||||||
|
};
|
||||||
|
file = "themes/Catppuccin Mocha.tmTheme";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
# command-not-found backed by the prebuilt nix-index DB (module imported
|
# command-not-found backed by the prebuilt nix-index DB (module imported
|
||||||
# above). `comma` runs an uninstalled program once: `, cowsay hi`.
|
# above). `comma` runs an uninstalled program once: `, cowsay hi`.
|
||||||
@@ -138,6 +183,13 @@
|
|||||||
flake = "$HOME/code/nixfiles";
|
flake = "$HOME/code/nixfiles";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
# GitHub CLI. Prefer SSH for any git operations it drives, matching the
|
||||||
|
# ssh-based remotes used elsewhere.
|
||||||
|
programs.gh = {
|
||||||
|
enable = true;
|
||||||
|
settings.git_protocol = "ssh";
|
||||||
|
};
|
||||||
|
|
||||||
programs.tmux = {
|
programs.tmux = {
|
||||||
enable = true;
|
enable = true;
|
||||||
reverseSplit = true;
|
reverseSplit = true;
|
||||||
|
|||||||
@@ -0,0 +1,8 @@
|
|||||||
|
# statix lint config. Two default lints are disabled because they flag this
|
||||||
|
# repo's intentional house style, not bugs:
|
||||||
|
# repeated_keys - we use `foo.a = ...; foo.b = ...;` (dotted) over nesting.
|
||||||
|
# empty_pattern - module files use `{ ... }:` / `{ }:` deliberately.
|
||||||
|
disabled = [
|
||||||
|
"repeated_keys",
|
||||||
|
"empty_pattern",
|
||||||
|
]
|
||||||
Reference in New Issue
Block a user