> ## Documentation Index
> Fetch the complete documentation index at: https://mintlify.com/soriphoono/homelab/llms.txt
> Use this file to discover all available pages before exploring further.

# User Applications

> Optional application modules for browsers, development tools, and productivity software

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:

```nix theme={null}
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

<CardGroup cols={2}>
  <Card title="LibreWolf" icon="firefox">
    Privacy-focused Firefox fork with pre-configured privacy settings.

    **Priority**: 10 (highest by default)
  </Card>

  <Card title="Firefox" icon="firefox">
    Mozilla Firefox with FF-ULTIMA theme and privacy extensions.

    **Priority**: 20
  </Card>

  <Card title="Floorp" icon="browser">
    Japanese Firefox-based browser with unique features.

    **Priority**: 30
  </Card>

  <Card title="Google Chrome" icon="chrome">
    Google's browser (binary distribution).

    **Priority**: 100 (lowest, fallback)
  </Card>
</CardGroup>

### Common Options

<ParamField path="userapps.browsers.<browser>.enable" type="boolean" default="false">
  Enable the browser.

  ```nix theme={null}
  userapps.browsers.librewolf.enable = true;
  ```
</ParamField>

<ParamField path="userapps.browsers.<browser>.priority" type="int">
  Priority for becoming the default browser. Lower values win.

  ```nix theme={null}
  userapps.browsers.firefox.priority = 15;  # Higher priority than default
  ```
</ParamField>

### 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](https://github.com/soulhotel/FF-ULTIMA) theme for a modern, minimalist interface.

### Example Configuration

```nix theme={null}
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:

```nix theme={null}
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

<ParamField path="userapps.communication.discord.enable" type="boolean" default="false">
  Enable Discord client (Vesktop).

  ```nix theme={null}
  userapps.communication.discord.enable = true;
  ```
</ParamField>

Uses [Vesktop](https://github.com/Vencord/Vesktop) - A Discord client with Vencord pre-installed for enhanced features and customization.

***

## Development Tools

Comprehensive development environment configuration.

### Enabling Development Tools

<ParamField path="userapps.development.enable" type="boolean" default="false">
  Enable development tools and configure environment.

  ```nix theme={null}
  userapps.development.enable = true;
  ```
</ParamField>

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

<ParamField path="userapps.development.editors.neovim.enable" type="boolean" default="false">
  Enable Neovim editor.

  ```nix theme={null}
  userapps.development.editors.neovim.enable = true;
  ```
</ParamField>

<ParamField path="userapps.development.editors.neovim.priority" type="int" default="20">
  Priority for being the default editor.

  ```nix theme={null}
  userapps.development.editors.neovim.priority = 10;
  ```
</ParamField>

<ParamField path="userapps.development.editors.neovim.settings" type="attrset" default="{}">
  Neovim configuration settings passed to [nvf](https://github.com/notashelf/nvf).

  ```nix theme={null}
  userapps.development.editors.neovim.settings = {
    vim.viAlias = true;
    vim.vimAlias = true;
    vim.lsp.enable = true;
  };
  ```
</ParamField>

Neovim is configured using the `nvf` (NeoVim Flake) framework, which provides a type-safe, modular configuration system.

**Example from homes/soriphoono:**

```nix theme={null}
userapps.development.editors.neovim.settings = import ./nvim {inherit pkgs;};
```

#### VSCode / VSCodium

<ParamField path="userapps.development.editors.vscode.enable" type="boolean" default="false">
  Enable VSCode/VSCodium editor.

  ```nix theme={null}
  userapps.development.editors.vscode.enable = true;
  ```
</ParamField>

<ParamField path="userapps.development.editors.vscode.package" type="package" default="pkgs.vscodium">
  The VSCode package to use.

  ```nix theme={null}
  userapps.development.editors.vscode.package = pkgs.vscode;
  ```
</ParamField>

<ParamField path="userapps.development.editors.vscode.desktop" type="string" default="codium.desktop">
  The desktop file name for XDG integration.

  ```nix theme={null}
  userapps.development.editors.vscode.desktop = "code.desktop";
  ```
</ParamField>

<ParamField path="userapps.development.editors.vscode.priority" type="int" default="30">
  Priority for being the default editor. Lower priority than terminal editors by default.

  ```nix theme={null}
  userapps.development.editors.vscode.priority = 25;
  ```
</ParamField>

### AI Agents

AI agent configuration modules for LLM integration.

```nix theme={null}
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

```nix theme={null}
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

<ParamField path="userapps.data-fortress.bitwarden.enable" type="boolean" default="false">
  Enable Bitwarden desktop client.

  ```nix theme={null}
  userapps.data-fortress.bitwarden.enable = true;
  ```
</ParamField>

Installs the official Bitwarden desktop application for password management.

### Nextcloud

<ParamField path="userapps.data-fortress.nextcloud.enable" type="boolean" default="false">
  Enable Nextcloud sync client.

  ```nix theme={null}
  userapps.data-fortress.nextcloud.enable = true;
  ```
</ParamField>

Installs the Nextcloud desktop client for file synchronization.

### Example

```nix theme={null}
userapps.data-fortress = {
  bitwarden.enable = true;
  nextcloud.enable = true;
};
```

***

## Office Suite

Productivity applications (configured in `modules/home/userapps/office/`).

```nix theme={null}
userapps.office = {
  # Office applications configuration
};
```

***

## Default Applications

Control XDG MIME type associations.

<ParamField path="userapps.defaultApplications.enable" type="boolean" default="false">
  Enable setting default applications via Nix configuration.

  ```nix theme={null}
  userapps.defaultApplications.enable = true;
  ```
</ParamField>

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:

```nix theme={null}
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;
  };
};
```
