Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Garuda Nix

built with nix pipeline status

General information

Garuda Nix is a Nix flake, which allows easy dual boot with Garuda Linux. But it also provides a framework for pure NixOS, which provides opinionated defaults and a system which can be fully set up by toggling a few module options or installed using our installer ISO.

Prefer a graphical install? The flake also builds an installer ISO with a Calamares GUI for beginners and an install-garuda-nix CLI with presets, automatic partition layouts, and impermanence support.

Devshell and how to enter it

This NixOS flake provides a devshell which contains all deployment tools as well as handy aliases for common tasks. The only requirement for using it is having the Nix package manager available. It can be installed on various distributions via the package manager or the following script (click me for more information):

curl --proto '=https' --tlsv1.2 -sSf -L https://install.determinate.systems/nix -o nix-install.sh

# Check script content before running
sh ./nix-install.sh install --diagnostic-endpoint=""

This installs the Nix packages with flakes already pre-enabled. After that, the shell can be invoked as follows:

nix develop # The intended way to use the devshell
nix-shell   # Legacy, non-flakes way if flakes are not available for some reason

This also sets up pre-commit-hooks and shows the currently implemented tasks, which can be executed by running the command shown in the welcome message.

Quick start

Intro

The original idea behind this project was to use NixOS as a subsystem of Garuda. This means it can be installed easily from a running Garuda installation. This all works via BTRFS subvolumes, therefore any OS other than Garuda is considered unsupported for this method. Settings like users, passwords, and locales are automatically derived from Garuda and change with it. An option to partly share the /home partition between Garuda and NixOS has also been provided.

At the time of writing, setting up a dr460nized desktop is the only option. This may or may not change in the future.

Installation

Our repo contains garuda-nix-subsystem, which is the needed part to get going:

sudo pacman -S garuda-nix-subsystem # get the package
garuda-nix-subsystem install        # trigger the installation process

The script will first install Nix, the package manager, and proceed by setting up the required subvolumes. After the process is finished, the subsystem may now be entered by rebooting and selecting the new Garuda Nix Subsystem entry in GRUB.

Updating

The system may be updated by running sudo garuda-nix-subsystem update from either Garuda or by running garuda-update on Garuda Nix Subsystem. This sources the latest tagged commit from our Garuda Nix repo, which also updates the flake’s inputs and therefore all package versions.

Using as NixOS module

To make use of this flake, you can use it as follows - we assume flakes to be enabled:

{
  description = "My configuration";

  inputs = {
    nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable";
    garuda.url = "gitlab:garuda-linux/garuda-nix-subsystem/stable";
  };

  outputs = { garuda, nixpkgs, ... }: {
    nixosConfigurations = {
      hostname = garuda.lib.garudaSystem {
        system = "x86_64-linux";
        modules = [
          ./configuration.nix # Your system configuration.
        ];
      };
    };
  };
}

You may notice that we are using garuda.lib.garudaSystem to build the derivation. garudaSystem provides an opinionated system configuration similar to what Garuda Linux provides out of the box. It also exposes our modules which can then be referenced in our modules like garuda.*. Then, build your configuration as usual. GNS defaults are generally lower priority than your settings, therefore it’s easy to override most settings if needed.

You may also use any of the Chaotic Nyx’s module or home-manager options. Garuda Nix’ nixpkgs input follows Nyx’ nyxpkgs-unstable (which updates daily and shouldn’t be overridden to profit from their binary cache).

An exemplary configuration.nix could look as follows:

{ ... }: {
  # Your hardware configuration
  imports = [ ./hardware-configuration.nix ];

  # Hostname
  networking.hostName = "yourmachine";

  # Enabling the dr460nized desktop version
  # options and applications
  garuda = {
    dr460nized.enable = true;
    gaming.enable = true;
    performance-tweaks = {
      enable = true;
    };
  };
}

Updating

Garuda Nix installs the garuda-update command on GUI systems and on systems managed through garuda-managed.json. It is the a convenient way to keep the system up to date.

garuda-update

What it does

  • NixOS flake setups: updates the flake inputs, rebuilds with nh os switch, and commits the refreshed flake.lock when the flake lives in a Git repository. The flake defaults to /etc/nixos and can be pointed elsewhere with GARUDA_FLAKE.
  • Managed systems (/etc/nixos/garuda-managed.json exists): downloads the latest updater from the stable branch and runs it. This regenerates the managed configuration, updates the flake inputs and rebuilds.

Rolling back

Roll back to the previous generation (only on standalone NixOS):

garuda-update --rollback

Subsystem

On a Garuda subsystem, garuda-update runs from inside Garuda Nix with the managed path described above. The update can also be triggered from the Garuda host with sudo garuda-nix-subsystem update.

Getting the ISO

Download

The ISO can be downloaded from our builds page page. Available build types:

  • garuda-nix-dr460nized-26.11-x86_64-linux.iso: these are built daily and point to our latest stable tag, which is only tagged if evaluation and a few other checks pass

Flash & Boot

Write the ISO to a USB drive:

sudo dd if=$name.iso of=/dev/$usb bs=4M status=progress oflag=sync

Replace $usb with your USB drive, and $name with the resulting ISO file. This destroys all data on the drive.

Once booted, continue with installing.

Build

The flake can build an installer ISO for three editions:

  • mokka
  • dr460nized
  • catppuccin

Build from the dev shell:

nix develop -c buildiso mokka

Replace mokka with dr460nized or catppuccin to build another edition. Use buildiso all to build all three.

Append --run to boot the freshly built ISO in QEMU instead of just copying it:

nix develop -c buildiso mokka --run

The command copies the ISO to the current working directory.

Alternatively, build the ISO directly with Nix:

nix build .#internal.iso-mokka
nix build .#internal.iso-dr460nized
nix build .#internal.iso-catppuccin

Installing

Two frontends install the same Garuda flake. Pick one:

Calamares (GUI)

The graphical installer keeps it simple on purpose: pick an edition (mokka, dr460nized) and pick optional features (gaming, printing, …). Further customization can be done after the installation is complete.

install-garuda-nix (CLI)

The command-line installer covers everything the GUI does, plus:

  • Presets
    • Choose from desktop, laptop, server, or handheld
  • Partition layouts
    • Choose from ext4, btrfs, luks-ext4, luks-btrfs, btrfs-impermanence, luks-btrfs-impermanence, ext4-impermanence, luks-ext4-impermanence
    • Choosing impermanence automatically sets up either btrfs rollback or root on tmpfs
  • Passwords
    • The user (--password) and root (--root-password) passwords are hashed with yescrypt and written into the generated config, so they survive impermanence/rollback

This can either be done interactively or non-interactively.

Example:

sudo install-garuda-nix --edition mokka --preset desktop \
  --feature gaming --feature printing \
  --hostname mypc --username nico \
  --disk /dev/sda --schema btrfs --install

All options

usage: install-garuda-nix [-h] [--edition {mokka,dr460nized}] [--preset {desktop,laptop,server,handheld}]
                          [--feature FEATURE] [--root ROOT] [--disk DISK]
                          [--schema {ext4,btrfs,luks-ext4,luks-btrfs,btrfs-impermanence,luks-btrfs-impermanence,ext4-impermanence,luks-ext4-impermanence}]
                          [--luks-pass-file LUKS_PASS_FILE] [--yes] [--hostname HOSTNAME] [--username USERNAME]
                          [--fullname FULLNAME] [--no-autologin] [--timezone TIMEZONE] [--locale LOCALE]
                          [--xkb-layout XKB_LAYOUT] [--xkb-variant XKB_VARIANT] [--vconsole VCONSOLE]
                          [--bootloader {auto,systemd-boot,grub,none}] [--grub-device GRUB_DEVICE]
                          [--kernel {cachyos,lts,latest}] [--flake-ref FLAKE_REF] [--state-version STATE_VERSION]
                          [--allow-unfree | --no-allow-unfree] [--install | --no-install] [--no-bootloader] [--tui]
                          [--password PASSWORD] [--root-password ROOT_PASSWORD]

Generate a Garuda NixOS config from the shared installer template.

options:
  -h, --help            show this help message and exit
  --edition {mokka,dr460nized}
                        asked interactively when missing
  --preset {desktop,laptop,server,handheld}
  --feature FEATURE     repeatable, one of: btrfs-maintenance, gaming, impermanence, performance, powersave, printing,
                        samba, scanning
  --root ROOT           target mount point (default: /mnt)
  --disk DISK           wipe and partition this disk before installing (e.g. /dev/sda). If not specified and <root> is
                        not mounted, pick from a list
  --schema {ext4,btrfs,luks-ext4,luks-btrfs,btrfs-impermanence,luks-btrfs-impermanence,ext4-impermanence,luks-ext4-impermanence}
                        partitioning schema for --disk (asked when missing, default: btrfs)
  --luks-pass-file LUKS_PASS_FILE
                        file with the LUKS passphrase (else prompted)
  --yes                 skip the disk-wipe confirmation (dangerous)
  --hostname HOSTNAME
  --username USERNAME
  --fullname FULLNAME
  --no-autologin        disable display-manager autologin
  --timezone TIMEZONE   default: host's /etc/localtime zone
  --locale LOCALE
  --xkb-layout XKB_LAYOUT
  --xkb-variant XKB_VARIANT
  --vconsole VCONSOLE
  --bootloader {auto,systemd-boot,grub,none}
                        auto: systemd-boot on UEFI, otherwise grub needs --grub-device
  --grub-device GRUB_DEVICE
                        e.g. /dev/sda for BIOS installs
  --kernel {cachyos,lts,latest}
  --flake-ref FLAKE_REF
  --state-version STATE_VERSION
  --allow-unfree, --no-allow-unfree
                        keep unfree packages (default: True, --no-allow-unfree to flip)
  --install, --no-install
                        run nixos-install --flake <root>/etc/nixos#<hostname> afterwards (default: True, --no-install to
                        skip)
  --no-bootloader       pass --no-bootloader to nixos-install (test VMs without EFI vars)
  --tui                 force the interactive wizard even when all flags are given
  --password PASSWORD   set the user password non-interactively
  --root-password ROOT_PASSWORD
                        set the root password non-interactively

Install from the flake

On any NixOS host with internet, run the installer directly from the published flake:

sudo nix run gitlab:garuda-linux/garuda-nix-subsystem/stable#install-garuda-nix -- \
  --edition mokka --hostname mypc --username nico --install

--flake-ref defaults to that same stable ref, so the generated config already points at it: future rebuilds are just nixos-rebuild switch --flake /etc/nixos#mypc. Pass --flake-ref gitlab:garuda-linux/garuda-nix-subsystem/stable (or any ref) to track a different branch instead.

Module options

Both installers write a flake config built from the same template; what lands in configuration.nix is controlled by the module options reference (garuda.gaming.enable, garuda.impermanence.*, …). Presets and features are just shortcuts that flip those options on.

Garuda module options

71 options under garuda.*.

garuda.audio

garuda.audio.pipewire.enable

If set to true, a default configuration for Pipewire will be used.

  • Type: boolean
  • Default: false
  • Example: false
  • Declared in: internal/modules/base/sound.nix

garuda.btrfs-maintenance

garuda.btrfs-maintenance.deduplication

Enables the beesd service to deduplicate files in the background.

  • Type: boolean
  • Default: false
  • Declared in: internal/modules/base/services.nix

garuda.btrfs-maintenance.enable

Installs and enables some filesystem optimizations for BTRFS.

  • Type: boolean
  • Default: false
  • Declared in: internal/modules/base/services.nix

garuda.btrfs-maintenance.uuid

The UUID of the BTRFS filesystem to deduplicate.

  • Type: null or string
  • Default: null
  • Declared in: internal/modules/base/services.nix

garuda.catppuccin

garuda.catppuccin.enable

Catppuccin Mocha edition: consistent pastel theming across the desktop and applications via catppuccin/nix.

  • Type: boolean
  • Default: false
  • Example: true

garuda.chaotic-nyx

garuda.chaotic-nyx.cache.enable

If set to true, Chaotic’s Nyx will have its binary cache automatically enabled and managed.

  • Type: boolean
  • Default: true
  • Declared in: internal/modules/base/nyx.nix

garuda.dr460nized

garuda.dr460nized.enable

Dr460nized edition: vibrant Sweet-themed Plasma 6 gaming desktop, with matching login theme, apps and defaults. Mutually exclusive with garuda.mokka.

  • Type: boolean
  • Default: false
  • Example: true

garuda.excludes

garuda.excludes.defaultpackages.exclude

Remove individual entries from the “defaultpackages” list, matched by their string representation. Everything else stays as shipped.

  • Type: list of anything
  • Default: [ ]
  • Declared in: internal/modules/base/programs.nix

garuda.excludes.defaultpackages.excludeAll

Drop every entry the Garuda modules would otherwise put into the “defaultpackages” list (system packages, kernel parameters, nix-ld libraries, home-manager modules, …). Useful for minimal installs.

  • Type: boolean
  • Default: false
  • Declared in: internal/modules/base/programs.nix

garuda.excludes.home-manager-modules.exclude

Remove individual entries from the “home-manager-modules” list, matched by their string representation. Everything else stays as shipped.

  • Type: list of anything
  • Default: [ ]
  • Declared in: internal/modules/base/home-manager/home-manager.nix

garuda.excludes.home-manager-modules.excludeAll

Drop every entry the Garuda modules would otherwise put into the “home-manager-modules” list (system packages, kernel parameters, nix-ld libraries, home-manager modules, …). Useful for minimal installs.

  • Type: boolean
  • Default: false
  • Declared in: internal/modules/base/home-manager/home-manager.nix

garuda.excludes.kernelparameters.exclude

Remove individual entries from the “kernelparameters” list, matched by their string representation. Everything else stays as shipped.

  • Type: list of anything
  • Default: [ ]
  • Declared in: internal/modules/base/boot.nix

garuda.excludes.kernelparameters.excludeAll

Drop every entry the Garuda modules would otherwise put into the “kernelparameters” list (system packages, kernel parameters, nix-ld libraries, home-manager modules, …). Useful for minimal installs.

  • Type: boolean
  • Default: false
  • Declared in: internal/modules/base/boot.nix

garuda.excludes.nixldlibraries.exclude

Remove individual entries from the “nixldlibraries” list, matched by their string representation. Everything else stays as shipped.

  • Type: list of anything
  • Default: [ ]
  • Declared in: internal/modules/base/programs.nix

garuda.excludes.nixldlibraries.excludeAll

Drop every entry the Garuda modules would otherwise put into the “nixldlibraries” list (system packages, kernel parameters, nix-ld libraries, home-manager modules, …). Useful for minimal installs.

  • Type: boolean
  • Default: false
  • Declared in: internal/modules/base/programs.nix

garuda.flatpak

garuda.flatpak.enable

Whether to enable Flatpak with the Flathub remote pre-added.

  • Type: boolean
  • Default: false
  • Example: true
  • Declared in: internal/modules/base/flatpak.nix

garuda.fonts

garuda.fonts.enable

Reasonable fontconfig defaults.

  • Type: boolean
  • Default: false
  • Declared in: internal/modules/base/fonts.nix

garuda.gaming

garuda.gaming.enable

Gaming setup: Steam (with gamescope session), GameMode, and the CachyOS gaming kernel/userspace settings.

  • Type: boolean
  • Default: false
  • Example: true
  • Declared in: internal/modules/base/gaming.nix

garuda.garuda-chroot

garuda.garuda-chroot.boot-uuid

Provide the UUID of the Garuda boot partition

  • Type: string
  • Default: null
  • Example: "D9CB-2B11"
  • Declared in: internal/modules/base/mount-garuda.nix

garuda.garuda-chroot.enable

Enables mounting of the Garuda Linux root partition.

  • Type: boolean
  • Default: false
  • Example: true
  • Declared in: internal/modules/base/mount-garuda.nix

garuda.garuda-chroot.nvidia

Bind the NVIDIA device nodes into the container (host has an NVIDIA GPU).

  • Type: boolean
  • Default: false
  • Example: true
  • Declared in: internal/modules/base/mount-garuda.nix

garuda.garuda-chroot.pipewire

Bind the host PipeWire socket into the container for native audio.

  • Type: boolean
  • Default: true
  • Example: false
  • Declared in: internal/modules/base/mount-garuda.nix

garuda.garuda-chroot.root

Specifies where the Garuda Linux root partition should be mounted

  • Type: string
  • Default: "/var/lib/machines/garuda"
  • Example: "/mnt/ssd/garuda"
  • Declared in: internal/modules/base/mount-garuda.nix

garuda.garuda-chroot.root-uuid

Provide the UUID of the Garuda root partition

  • Type: string
  • Default: null
  • Example: "f498b189-79c7-40e4-859e-fadc1496ee8e"
  • Declared in: internal/modules/base/mount-garuda.nix

garuda.garuda-chroot.user

The default user of the Garuda / NixOS subsystem

  • Type: string
  • Default: null
  • Example: "garuda"
  • Declared in: internal/modules/base/mount-garuda.nix

garuda.garuda-chroot.wayland

Bind the host Wayland socket into the container to allow running GUI apps from within the Garuda installation on NixOS.

  • Type: boolean
  • Default: true
  • Example: true
  • Declared in: internal/modules/base/mount-garuda.nix

garuda.garuda-chroot.waylandSocket

Name of the host Wayland socket under /run/user/1000 to bind.

  • Type: string
  • Default: "wayland-0"
  • Example: "wayland-1"
  • Declared in: internal/modules/base/mount-garuda.nix

garuda.garuda-nix-manager

garuda.garuda-nix-manager.enable

Install garuda-nix-manager, the graphical tool for handling app installations.

  • Type: boolean
  • Default: false
  • Declared in: internal/modules/base/nix-manager.nix

garuda.hardware

garuda.hardware.autoDriver.enable

Whether to enable hardware auto-detection via nixos-facter.

  • Type: boolean
  • Default: true
  • Example: true
  • Declared in: internal/modules/base/hardware.nix

garuda.hardware.autoDriver.reportPath

Path to the nixos-facter report (written by the installer). Takes effect only when autoDriver.enable is set and the nixos-facter module is imported. Null disables it.

  • Type: null or absolute path
  • Default: null
  • Example: "./facter.json"
  • Declared in: internal/modules/base/hardware.nix

garuda.hardware.enable

Hardware baseline: CPU microcode updates, redistributable firmware, and the graphics stack (including 32-bit support on GUI systems).

  • Type: boolean
  • Default: true
  • Declared in: internal/modules/base/hardware.nix

garuda.hardware.laptop.enable

Whether to enable laptop power/thermal tuning.

  • Type: boolean
  • Default: false
  • Example: true
  • Declared in: internal/modules/base/hardware.nix

garuda.hardware.nvidia.amdgpuBusId

PCI bus ID of the AMD iGPU for PRIME offload (hardware.nvidia.prime.amdgpuBusId).

  • Type: null or string
  • Default: null
  • Example: "PCI:105:0:0"
  • Declared in: internal/modules/base/hardware.nix

garuda.hardware.nvidia.enable

Whether to enable proprietary NVIDIA driver support with the latest drivers.

  • Type: boolean
  • Default: false
  • Example: true
  • Declared in: internal/modules/base/hardware.nix

garuda.hardware.nvidia.nvidiaBusId

PCI bus ID of the NVIDIA dGPU for PRIME offload (hardware.nvidia.prime.nvidiaBusId).

  • Type: null or string
  • Default: null
  • Example: "PCI:1:0:0"
  • Declared in: internal/modules/base/hardware.nix

garuda.impermanence

garuda.impermanence.apps

Known apps whose state persists. Service apps enable automatically.

  • Type: list of (one of "accountsservice", "bluetooth", "docker", "firefox", "flatpak", "fprintd", "fwupd", "geoclue", "iwd", "libvirt", "modemmanager", "networkmanager", "nspawn", "plasmalogin", "podman", "printing", "rust", "samba", "steam", "thunderbird", "upower")
  • Default: [ ]
  • Declared in: internal/modules/base/impermanence/apps.nix

garuda.impermanence.device

Btrfs device holding the root/root-blank subvolumes.

  • Type: string
  • Default: "/dev/disk/by-label/nixos"
  • Declared in: internal/modules/base/impermanence

garuda.impermanence.enable

Whether to enable impermanence.

  • Type: boolean
  • Default: false
  • Example: true
  • Declared in: internal/modules/base/impermanence

garuda.impermanence.persistentUsers

Users whose .config/.local/share persist.

  • Type: list of string
  • Default: [ ]
  • Declared in: internal/modules/base/impermanence

garuda.impermanence.tmpfsRoot

Use tmpfs for / instead of rolling back a btrfs subvolume.

  • Type: boolean
  • Default: false
  • Declared in: internal/modules/base/impermanence

garuda.kde

garuda.kde.fontName

Fontconfig name matching fontPackage.

  • Type: string
  • Default: "Inter"
  • Example: "Fira"
  • Declared in: internal/modules/base/kde.nix

garuda.kde.fontPackage

Sans/serif interface font of the enabled edition.

  • Type: package
  • Default: <derivation inter-4.1>
  • Example: <derivation fira-4.301>
  • Declared in: internal/modules/base/kde.nix

garuda.kde.ocrLang

Tesseract OCR languages bundled into Spectacle (screenshot tool).

  • Type: list of string
  • Default: [ "eng" ]
  • Example: [ "eng" "deu" ]
  • Declared in: internal/modules/base/kde.nix

garuda.kde.themePackage

Plasma look-and-feel package (global theme, window decorations, login screen) applied to the desktop. Defaults to the theme of the enabled edition.

  • Type: package
  • Default: <derivation kde-0.2.6>
  • Example: <derivation breeze-6.7.5>
  • Declared in: internal/modules/base/kde.nix

garuda.kde.wallpaper

Wallpaper path inside themePackage, used for the login greeter.

  • Type: string
  • Default: "share/wallpapers/Tree/contents/images/Tree.jpg"
  • Declared in: internal/modules/base/kde.nix

garuda.managed

garuda.managed.config

Path to garuda-managed.json, written by garuda-nix-manager. It carries the managed settings — hostname, locale, timezone, keymap, auto-detected virtualisation, and extra packages — merged underneath your explicit configuration via gDefault, so anything you set yourself always overrides the defaults.

  • Type: null or absolute path
  • Default: null
  • Declared in: internal/modules/base/managed

garuda.mokka

garuda.mokka.enable

Mokka edition: calm dark Plasma 6 desktop in the Catppuccin Mocha palette, with matching login theme, apps and defaults. Mutually exclusive with garuda.dr460nized.

  • Type: boolean
  • Default: false
  • Example: true

garuda.networking

garuda.networking.enable

NetworkManager (loopback, docker and libvirt interfaces unmanaged, Wi-Fi powersaving off), legacy DHCP/wireless services disabled, and the wireless regulatory database enabled.

  • Type: boolean
  • Default: false
  • Example: true
  • Declared in: internal/modules/base/networking.nix

garuda.networking.iwd

Use iwd as the NetworkManager Wi-Fi backend.

  • Type: boolean
  • Default: false
  • Example: true
  • Declared in: internal/modules/base/networking.nix

garuda.networking.tweakKernel

Lower-latency networking: TCP BBR congestion control with the cake queueing discipline and a shorter TCP FIN timeout.

  • Type: boolean
  • Default: true
  • Example: true
  • Declared in: internal/modules/base/networking.nix

garuda.noLoginManagerAutologin

garuda.noLoginManagerAutologin.enable

Whether to enable autologin to desktop instead of using the login manager.

  • Type: boolean
  • Default: false
  • Example: true
  • Declared in: internal/modules/base/autologin.nix

garuda.noLoginManagerAutologin.startupCommand

The command to be executed after login.

  • Type: null or string
  • Default: null
  • Example: "startplasma-wayland"
  • Declared in: internal/modules/base/autologin.nix

garuda.noLoginManagerAutologin.user

The user to automatically login.

  • Type: null or string
  • Default: null
  • Example: "nixos"
  • Declared in: internal/modules/base/autologin.nix

garuda.performance-tweaks

garuda.performance-tweaks.enable

If set to true, this module will enable Garuda’s powersave tweaks. Conflicts with garuda.powersave-tweaks, only one may be enabled.

  • Type: boolean
  • Default: false
  • Example: true
  • Declared in: internal/modules/base/performance.nix

garuda.powersave-tweaks

garuda.powersave-tweaks.enable

If set to true, this module will enable Garuda’s powersave tweaks. Conflicts with garuda.performance-tweaks, only one may be enabled.

  • Type: boolean
  • Default: false
  • Example: true
  • Declared in: internal/modules/base/powersave.nix

garuda.preset

garuda.preset

Preset mapping to performance/powersave, ssh, firewall.

  • Type: null or one of "desktop", "laptop", "server", "handheld"
  • Default: null
  • Declared in: internal/modules/base/presets.nix

garuda.printing

garuda.printing.enable

Installs and enables printing support (CUPS + drivers).

  • Type: boolean
  • Default: false
  • Declared in: internal/modules/base/services.nix

garuda.samba

garuda.samba.enable

Installs and enables Samba file sharing. Shares themselves are user-defined via services.samba.settings.

  • Type: boolean
  • Default: false
  • Declared in: internal/modules/base/services.nix

garuda.scanning

garuda.scanning.enable

Installs and enables scanner support (SANE + AirScan + IPP-USB).

  • Type: boolean
  • Default: false
  • Declared in: internal/modules/base/services.nix

garuda.shell

garuda.shell.enable

Sets Fish as interactive shell (auto-launched from bash), micro as default editor, and adds Garuda’s shell aliases.

  • Type: boolean
  • Default: true
  • Declared in: internal/modules/base/shells.nix

garuda.subsystem

garuda.subsystem.enable

Run this NixOS install as a subsystem inside Garuda Linux: it derives certain settings from the Garuda installation, imports the host’s users, shares their home directories and mounts the Garuda root filesystem for cross-system access.

  • Type: boolean
  • Default: false
  • Declared in: internal/modules/base/managed

garuda.subsystem.import-networkmanager

Bind-mount the Garuda host’s NetworkManager system-connections into this system, so Wi-Fi and VPN profiles are shared instead of configured twice.

  • Type: boolean
  • Default: true
  • Declared in: internal/modules/base/managed

garuda.subsystem.imported-users.enable

Recreate the Garuda host users inside this system. Disable to manage users purely via users.users instead.

  • Type: boolean
  • Default: true
  • Declared in: internal/modules/base/managed/subsystem/imported-users.nix

garuda.subsystem.imported-users.shared-home.enable

Share the imported users’ ~/.config, ~/.local and ~/.cache between the Garuda host home and the NixOS home via bind mounts, so app settings carry over to the subsystem.

  • Type: boolean
  • Default: true
  • Declared in: internal/modules/base/managed/subsystem/imported-users.nix

garuda.subsystem.imported-users.shared-home.uuid

UUID of the Garuda BTRFS filesystem holding the @home subvolume that the shared home directories are mounted from. Set automatically from garuda-managed.json.

  • Type: string
  • Declared in: internal/modules/base/managed/subsystem/imported-users.nix

garuda.subsystem.imported-users.users

User accounts imported from the Garuda host (populated from garuda-managed.json), keyed by username. Each entry recreates the host user witht the same UID, home and admin rights inside NixOS.

  • Type: attribute set of (submodule)
  • Default: { }
  • Declared in: internal/modules/base/managed/subsystem/imported-users.nix

garuda.subsystem.imported-users.users.<name>.home

Home directory of the imported user, e.g. /home/garuda.

  • Type: string
  • Declared in: internal/modules/base/managed/subsystem/imported-users.nix

garuda.subsystem.imported-users.users.<name>.passwordHash

Hashed initial password, used as initialHashedPassword.

  • Type: string
  • Declared in: internal/modules/base/managed/subsystem/imported-users.nix

garuda.subsystem.imported-users.users.<name>.uid

Numeric UID, kept identical to the Garuda host user.

  • Type: signed integer
  • Declared in: internal/modules/base/managed/subsystem/imported-users.nix

garuda.subsystem.imported-users.users.<name>.wheel

Whether the imported user gets wheel (sudo) membership.

  • Type: boolean
  • Declared in: internal/modules/base/managed/subsystem/imported-users.nix

garuda.subsystem.useGrub

Install GRUB (device “nodev”) so the Garuda host bootloader can chainload this system. Disable when the host bootloader already handles booting or another loader is used.

  • Type: boolean
  • Default: true
  • Declared in: internal/modules/base/managed