summaryrefslogtreecommitdiff
path: root/nixos/docs/ADDING_PACKAGES.md
diff options
context:
space:
mode:
Diffstat (limited to 'nixos/docs/ADDING_PACKAGES.md')
-rw-r--r--nixos/docs/ADDING_PACKAGES.md183
1 files changed, 0 insertions, 183 deletions
diff --git a/nixos/docs/ADDING_PACKAGES.md b/nixos/docs/ADDING_PACKAGES.md
deleted file mode 100644
index d1b5eba..0000000
--- a/nixos/docs/ADDING_PACKAGES.md
+++ /dev/null
@@ -1,183 +0,0 @@
-# Dendritic Pattern
-
-Dendritic is the way to organize your packages in NixOS — around features. https://github.com/mightyiam/dendritic this is a good example!
-
-# Adding Packages
-
-This configuration is composed from `hosts/opus/default.nix` and focused modules
-under `modules/features/`. There is no central package list.
-
-## Where a package belongs
-
-| Package type | Module |
-| --- | --- |
-| Terminal | `modules/features/terminals/default.nix` |
-| CLI tool (incl. shell prompts like starship) | `modules/features/cli-tools/default.nix` |
-| Editor or IDE | `modules/features/editors/default.nix` |
-| Compiler, linter, language tool | `modules/features/dev-tools/default.nix` |
-| File manager or archive tool (incl. drag & drop tools) | `modules/features/file-managers/default.nix` |
-| Wayland clipboard, screenshot, or input tool | `modules/features/wayland-tools/default.nix` |
-| Audio application | `modules/features/audio-tools/default.nix` |
-| Media recording or streaming tool | `modules/features/media-tools/default.nix` |
-| System monitor or fetch tool | `modules/features/monitoring/default.nix` |
-| Font | `modules/features/fonts/default.nix` |
-| GStreamer plugin | `modules/features/gst-codecs/default.nix` |
-| Runtime library for external binaries | `modules/features/binary-compat/default.nix` |
-| Web browser | `modules/features/browsers/default.nix` |
-| Messaging or communication app | `modules/features/messaging/default.nix` |
-| Office suite, note-taking app, or document viewer/editor | `modules/features/productivity/default.nix` |
-| Password manager or encryption tool | `modules/features/security/default.nix` |
-| Gaming app, game launcher, or gaming service (Steam, etc.) | `modules/features/gaming/default.nix` |
-| P2P or torrent client | `modules/features/p2p/default.nix` |
-| Language dictionary or spell-check data | `modules/features/language-tools/default.nix` |
-| Desktop application (catch-all for GUI apps without a fitting category) | `modules/features/desktop-apps/default.nix` |
-
-First use an existing category. Create a new feature module only if the package is
-its own service, subsystem, or a group of related packages without a fitting category.
-
-## Add to an existing module
-
-Add the package to that module's `environment.systemPackages` list:
-
-```nix
-{ pkgs, ... }:
-
-{
- environment.systemPackages = with pkgs; [
- existing-package
- ripgrep
- ];
-}
-```
-
-Most modules use `with pkgs;`, so use unqualified package names. Use `pkgs.<name>`
-when an explicit path is useful, such as `pkgs.vimPlugins.im-select-nvim`, or when
-applying an override:
-
-```nix
-(emacs.override { withNativeCompilation = true; })
-```
-
-Keep related packages together and follow the local ordering of the file.
-
-## Fonts are different
-
-Fonts belong in `modules/features/fonts/default.nix` under `fonts.packages`, not
-`environment.systemPackages`:
-
-```nix
-fonts.packages = with pkgs; [
- nerd-fonts.jetbrains-mono
- noto-fonts-color-emoji
-];
-```
-
-## Language dictionaries are different
-
-Spell-check dictionaries, transliteration data, and other language data belong in
-`modules/features/language-tools/default.nix` under `environment.systemPackages`, not
-in `fonts.packages` or a general-purpose module:
-
-```nix
-{ pkgs, ... }:
-
-{
- environment.systemPackages = with pkgs; [
- hunspellDicts.ru_RU
- ];
-}
-```
-
-## Gaming services live in the gaming module
-
-Gaming-related services and packages — Steam configuration, game launchers, Wine-based
-app runners — belong in `modules/features/gaming/default.nix`. This keeps the host file
-lean and makes the gaming stack reusable across hosts:
-
-```nix
-{ pkgs, ... }:
-
-{
- programs.steam = {
- enable = true;
- remotePlay.openFirewall = true;
- };
-
- environment.systemPackages = with pkgs; [
- pkgs.lutris
- pkgs.prismlauncher
- ];
-}
-```
-
-## Create a new feature module
-
-1. Create `modules/features/<category>/default.nix`:
-
- ```nix
- { pkgs, ... }:
-
- {
- environment.systemPackages = with pkgs; [
- package-name
- ];
- }
- ```
-
-2. Add its directory to the `imports` list in `hosts/opus/default.nix`:
-
- ```nix
- ../../modules/features/<category>
- ```
-
-3. Put services and program options in the same module when they belong to that
- feature, as done by `modules/features/mpd/default.nix`.
-
-## Host-only packages
-
-For a package that is truly specific to this desktop, add it to the small
-`environment.systemPackages` list in `hosts/opus/default.nix`. If that list starts to
-represent a reusable category, extract a feature module.
-
-## Packages from flake inputs
-
-Packages provided by a flake input use `inputs` and the host platform, following
-`modules/features/browsers/default.nix`:
-
-```nix
-{ pkgs, inputs, ... }:
-
-{
- environment.systemPackages = with pkgs; [
- inputs.helium-browser.packages.${pkgs.stdenv.hostPlatform.system}.helium
- ];
-}
-```
-
-If an input provides a NixOS module, import it in the feature module, following
-`modules/features/noctalia-greeter/default.nix`:
-
-```nix
-imports = [
- inputs.some-input.nixosModules.default
-];
-```
-
-The input itself must first be declared in `flake.nix`.
-
-## Build and switch
-
-From the `nixos/` directory, first test that the configuration evaluates and builds:
-
-```bash
-doas nixos-rebuild build --flake .#opus
-```
-
-Then activate it:
-
-```bash
-doas nixos-rebuild switch --flake .#opus
-```
-
-If a terminal's font icons do not update after adding fonts, restart the terminal or
-log out and back in after the switch.