Skip to main content
User application modules provide declarative configuration for common desktop applications. All modules are opt-in and can be enabled individually.

Enabling User Applications

The top-level userapps.enable option enables profile-sync-daemon for browser optimization:
userapps.enable = true;
This enables:
  • Profile Sync Daemon (psd) - Syncs browser profiles to tmpfs for improved performance
  • Resync interval: 10 minutes

Browsers

Multiple browsers can be installed simultaneously. Priority values determine which becomes the default.

Available Browsers

LibreWolf

Privacy-focused Firefox fork with pre-configured privacy settings.Priority: 10 (highest by default)

Firefox

Mozilla Firefox with FF-ULTIMA theme and privacy extensions.Priority: 20

Floorp

Japanese Firefox-based browser with unique features.Priority: 30

Google Chrome

Google’s browser (binary distribution).Priority: 100 (lowest, fallback)

Common Options

userapps.browsers.<browser>.enable
boolean
default:"false"
Enable the browser.
userapps.browsers.librewolf.enable = true;
userapps.browsers.<browser>.priority
int
Priority for becoming the default browser. Lower values win.
userapps.browsers.firefox.priority = 15;  # Higher priority than default

Firefox-based Browsers

LibreWolf, Firefox, and Floorp share common configuration:

Search Engines

All Firefox-based browsers include custom search engines:
  • DuckDuckGo (default) - Privacy-focused search
  • Nix Packages (@np) - Search NixOS packages
  • Nix Options (@no) - Search NixOS options
  • NixOS Wiki (@nw) - Search the NixOS wiki
Google and Bing are hidden by default.

Extensions

Pre-installed extensions:
  • uBlock Origin - Ad and tracker blocking
  • Privacy Badger - Intelligent tracker blocking
  • Bitwarden - Password manager integration

Theme

Firefox-based browsers use the FF-ULTIMA theme for a modern, minimalist interface.

Example Configuration

userapps = {
  defaultApplications.enable = true;  # Set XDG default applications
  
  browsers = {
    librewolf = {
      enable = true;
      priority = 10;  # Default browser
    };
    firefox = {
      enable = true;
      priority = 20;  # Installed but not default
    };
    chrome = {
      enable = true;
      priority = 100; # Fallback
    };
  };
};

Chrome Configuration

Chrome has a special default behavior:
userapps.browsers.chrome.enable = true;  # Auto-enables if no other browsers enabled
This ensures at least one browser is always available.

Communication

Communication applications for messaging and collaboration.

Discord

userapps.communication.discord.enable
boolean
default:"false"
Enable Discord client (Vesktop).
userapps.communication.discord.enable = true;
Uses Vesktop - A Discord client with Vencord pre-installed for enhanced features and customization.

Development Tools

Comprehensive development environment configuration.

Enabling Development Tools

userapps.development.enable
boolean
default:"false"
Enable development tools and configure environment.
userapps.development.enable = true;
This enables:
  • npm with local bin directory in PATH (~/.npm/bin)
  • uv - Fast Python package installer and resolver

Text Editors

Editor modules support priority-based defaults for EDITOR and VISUAL environment variables.

Neovim

userapps.development.editors.neovim.enable
boolean
default:"false"
Enable Neovim editor.
userapps.development.editors.neovim.enable = true;
userapps.development.editors.neovim.priority
int
default:"20"
Priority for being the default editor.
userapps.development.editors.neovim.priority = 10;
userapps.development.editors.neovim.settings
attrset
default:"{}"
Neovim configuration settings passed to nvf.
userapps.development.editors.neovim.settings = {
  vim.viAlias = true;
  vim.vimAlias = true;
  vim.lsp.enable = true;
};
Neovim is configured using the nvf (NeoVim Flake) framework, which provides a type-safe, modular configuration system. Example from homes/soriphoono:
userapps.development.editors.neovim.settings = import ./nvim {inherit pkgs;};

VSCode / VSCodium

userapps.development.editors.vscode.enable
boolean
default:"false"
Enable VSCode/VSCodium editor.
userapps.development.editors.vscode.enable = true;
userapps.development.editors.vscode.package
package
default:"pkgs.vscodium"
The VSCode package to use.
userapps.development.editors.vscode.package = pkgs.vscode;
userapps.development.editors.vscode.desktop
string
default:"codium.desktop"
The desktop file name for XDG integration.
userapps.development.editors.vscode.desktop = "code.desktop";
userapps.development.editors.vscode.priority
int
default:"30"
Priority for being the default editor. Lower priority than terminal editors by default.
userapps.development.editors.vscode.priority = 25;

AI Agents

AI agent configuration modules for LLM integration.
userapps.development.agents = {
  # Future: MCP server configuration
  # Future: Skills configuration
  # Future: Gemini client configuration
};
Located in modules/home/userapps/development/agents/:
  • mcp-servers.nix - Model Context Protocol server management
  • skills.nix - Agent skill definitions
  • clients/gemini.nix - Google Gemini API client

Development Categories

The development module structure includes:
development/
├── agents/              # AI agent configurations
├── editors/             # Text editors (Neovim, VSCode, etc.)
├── domain_specific/     # Domain tools (k8s, etc.)
├── terminal/            # Terminal emulators (Kitty, Ghostty, Warp)
├── knowledge-management/  # Obsidian, etc.
└── disk_tools/          # Disk utilities

Example Configuration

userapps.development = {
  enable = true;
  
  editors = {
    neovim = {
      enable = true;
      priority = 10;
      settings = {
        vim.viAlias = true;
        vim.vimAlias = true;
      };
    };
    
    vscode = {
      enable = true;
      priority = 20;
      package = pkgs.vscode;
    };
  };
};

Data Fortress

Security and cloud storage applications.

Bitwarden

userapps.data-fortress.bitwarden.enable
boolean
default:"false"
Enable Bitwarden desktop client.
userapps.data-fortress.bitwarden.enable = true;
Installs the official Bitwarden desktop application for password management.

Nextcloud

userapps.data-fortress.nextcloud.enable
boolean
default:"false"
Enable Nextcloud sync client.
userapps.data-fortress.nextcloud.enable = true;
Installs the Nextcloud desktop client for file synchronization.

Example

userapps.data-fortress = {
  bitwarden.enable = true;
  nextcloud.enable = true;
};

Office Suite

Productivity applications (configured in modules/home/userapps/office/).
userapps.office = {
  # Office applications configuration
};

Default Applications

Control XDG MIME type associations.
userapps.defaultApplications.enable
boolean
default:"false"
Enable setting default applications via Nix configuration.
userapps.defaultApplications.enable = true;
When enabled, modules can set XDG MIME type defaults based on priority values. This affects:
  • Default web browser for HTTP/HTTPS links
  • Default text editor for plain text and code files
  • Other file type associations
Disable this if you prefer to manage default applications through your desktop environment.

Complete Example

A comprehensive user applications configuration:
userapps = {
  enable = true;
  defaultApplications.enable = true;
  
  browsers = {
    librewolf.enable = true;  # Default browser (priority 10)
    firefox.enable = true;    # Alternative (priority 20)
  };
  
  communication = {
    discord.enable = true;
  };
  
  development = {
    enable = true;
    
    editors = {
      neovim = {
        enable = true;
        priority = 10;  # Default editor
        settings = import ./nvim-config.nix;
      };
      
      vscode = {
        enable = true;
        priority = 30;
        package = pkgs.vscode;
      };
    };
  };
  
  data-fortress = {
    bitwarden.enable = true;
    nextcloud.enable = true;
  };
};

Build docs developers (and LLMs) love