--- author: Birk --- # Nix(OS) a introduction --- ## What is Nix? * a domain specific language * a package manager * a Linux distribution --- ```mermaid %%{init: {'theme': 'dark', 'themeVariables': { 'darkMode': true }}}%% flowchart LR A(Nix language) B(Nix package manager) C(NixOS) D(macOS) E(Debian) F(Software/User config) G(Git) H(File) A-->B--->C & D & E---->F --> G & H ``` --- ## Demo ```mermaid %%{init: {'theme': 'dark', 'themeVariables': { 'darkMode': true }}}%% flowchart TD B(Disk & OS Installation) C(Desktop) D(Nextcloud server) E(nspawn container) F(Gitlab server) G(Podman container) H(Forgejo) I(MicroVM) J(Kubernetes) K(Splunk) B--> D & E & G & I B-->C E-->F G-->H I-->J-->K ``` ```nix beancloud.software.desktop = true; ``` --- ## History - 2003: [a declarative programming language](https://www.youtube.com/watch?v=fsgYVi2PQr0) - 2008: first stable NixOS version - 2014: 10.000 packages - 2019: Flakes - 2025: [120.000 packages](https://repology.org/repositories/graphs) --- ## Features - [declarative configuration](https://search.nixos.org/options?) (20.000 options) - [package](https://search.nixos.org/packages) count (120.000 + third party) - versioned config in Git and on the installed NixOS - development community on Github and others --- ## Infrastructure - [nixpkgs](https://github.com/NixOS/nixpkgs) on Github - [nix language](https://github.com/NixOS/nix) on Github - [Binary cache](https://cache.nixos.org/) for built packages - [CI server](https://hydra.nixos.org/) - [Build status](https://status.nixos.org/) page - ... --- ## Nextcloud ```mermaid %%{init: {'theme': 'dark', 'themeVariables': { 'darkMode': true }}}%% flowchart TD A(Disk & OS Installation) B(Nextcloud server) C(MariaDB) D(nginx) E(php-fm) F(Redis) A--> C & D & E & F --> B ``` ```nix beancloud.software.nextcloud.server.enable = true; ``` --- ## Gitlab ```mermaid %%{init: {'theme': 'dark', 'themeVariables': { 'darkMode': true }}}%% flowchart LR A(Disk & OS Installation) B(nspawn container) C(NixOS) D(Gitlab server) E[Postgres] F[nginx] A --> B --> C --> E & F --> D ``` ```nix beancloud.software.gitlab = true; ``` --- ## Forgejo ```mermaid %%{init: {'theme': 'dark', 'themeVariables': { 'darkMode': true }}}%% flowchart LR A(Disk & OS Installation) B(Podman container) C(Forgejo) D[virtualisation.oci-containers.containers.forgejo-frontend.image=codeberg.org/forgejo/forgejo:11.0.3-rootless] E[forgejo-backend.image=docker.io/library/mariadb:11.8.2] A --> B --> D & E --> C ``` ```nix beancloud.software.forgejo = true; ``` --- ## Splunk ```mermaid %%{init: {'theme': 'dark', 'themeVariables': { 'darkMode': true }}}%% flowchart LR subgraph pc-demo1 direction LR B(Disk & OS Installation) subgraph k8s direction LR I("MicroVM(NixOS)") J(Kubernetes) subgraph containerd direction LR L(Container) K(Splunk) end end end B--> I --> J --> L --> K ``` ```nix beancloud.software.splunk = true; ``` --- ## Unexpected stuff - Flakes are not stable yet, but everybody uses them - Documentation quality has room for improvement - Additional efforts for secrets management - Does not follow Linux Filesystem Hierarchy Standard - Commercial software usage can be tricky or impossible