diff options
| author | seraphim <18ycm9tx@anonaddy.me> | 2026-08-16 21:55:33 +0700 |
|---|---|---|
| committer | seraphim <18ycm9tx@anonaddy.me> | 2026-08-16 21:55:33 +0700 |
| commit | 7dd785b1005aec643004c06eaa7af690b00cb48f (patch) | |
| tree | bd8700ef4dfb8c0a1315f4eb41784d1d4ba43001 /nixos/docs | |
| parent | 100094fe8b9398c083fa6351925a00f5b3a9d36a (diff) | |
.
Diffstat (limited to 'nixos/docs')
| -rw-r--r-- | nixos/docs/ADDING_PACKAGES.md | 183 |
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. |
