dotfiles/README.md

116 lines
4.1 KiB
Markdown

# Custom environment
My personal development environment and dotfiles. The repository contains the
configuration I use to keep the terminal, editor, shell history, and Git
workflow consistent across machines.
## Toolset
| Tool | Purpose |
| --- | --- |
| [Kitty](https://sw.kovidgoyal.net/kitty/) | Terminal emulator |
| [Neovim](https://neovim.io/) | Editor and development environment |
| [Starship](https://starship.rs/) | Fast, minimal shell prompt |
| [direnv](https://direnv.net/) | Per-project environment variables |
| [zoxide](https://github.com/ajeetdsouza/zoxide) | Smarter directory navigation |
| [Atuin](https://atuin.sh/) | Searchable shell history |
| [fzf](https://github.com/junegunn/fzf) | Fuzzy finding from the command line |
| [eza](https://github.com/eza-community/eza) | Modern replacement for `ls` |
| [GitUI](https://github.com/gitui-org/gitui) | Terminal UI for Git |
The shell configuration also includes shortcuts for Meson and Ninja builds,
sanitizer-assisted test runs, `perf`, FlameGraph, and systemd user scopes.
## Repository layout
```text
.
├── flake.nix # Reproducible NixOS entry point
├── nixos/ # Host and reusable NixOS modules
├── bash/ # Bash environment, aliases, and helper functions
├── atuin/ # Atuin configuration
├── gitui/ # GitUI key bindings
├── kitty/ # Kitty settings and color themes
├── nvim/ # Neovim configuration and plugin lockfile
└── wallpapers/ # Desktop wallpapers
```
Starship, direnv, zoxide, fzf, and eza do not currently have dedicated
configuration directories tracked in this repository.
## NixOS
The flake exposes the `nixos` host. Its machine-specific configuration lives
in `nixos/hosts/nixos`, while reusable settings are grouped by purpose in
`nixos/modules`. Packages are split into desktop, development, shell, and
general utility modules under `nixos/modules/packages`.
From the repository root, check and apply the configuration with:
```bash
nix flake check
sudo nixos-rebuild switch --flake .#nixos
```
On the first run, if flakes are not enabled in the currently booted system,
pass the feature flags explicitly:
```bash
sudo nixos-rebuild switch \
--extra-experimental-features 'nix-command flakes' \
--flake .#nixos
```
Update the pinned Nixpkgs revision and rebuild with:
```bash
nix flake update
sudo nixos-rebuild switch --flake .#nixos
```
Codex is taken from a separately pinned Nixpkgs `master` input so it can be
updated without upgrading the stable NixOS package set:
```bash
nix flake update codex-nixpkgs
sudo nixos-rebuild switch --flake .#nixos
```
The `codex-background-server` user service starts automatically when `hhhh`
logs in and listens on the local Unix socket. Connect with
`codex --remote unix://`. Check its status with
`systemctl --user status codex-background-server` and view its logs with
`journalctl --user -u codex-background-server`.
Before using this configuration on another machine, regenerate or replace
`nixos/hosts/nixos/hardware-configuration.nix` and adjust the host name,
user, graphics driver, and `system.stateVersion` as appropriate.
## Installation
Clone the repository, install the tools listed above using your system package
manager, and link the configuration files into their expected locations. For
example:
```bash
git clone git@github.com:Claucdan/Custom-environment.git
cd Custom-environment
ln -sfn "$PWD/nvim" "$HOME/.config/nvim"
ln -sfn "$PWD/kitty" "$HOME/.config/kitty"
ln -sfn "$PWD/atuin" "$HOME/.config/atuin"
ln -sfn "$PWD/gitui" "$HOME/.config/gitui"
```
Review `.bashrc` before sourcing or linking it: some aliases, paths, and helper
functions are tailored to my local development setup.
## Notes
- A [Nerd Font](https://www.nerdfonts.com/) is recommended for Kitty,
Starship, and terminal icons.
- Neovim plugins are managed with
[lazy.nvim](https://github.com/folke/lazy.nvim); open Neovim after linking the
configuration to install them.
- This is a personal setup rather than a universal bootstrap script. Feel free
to copy or adapt any part of it.