nixkit Configuration Options

Version 26.05

Packages

The following packages are provided by nixkit:

PackageDescriptionPlatforms
aerospace-swipeswitch workspaces in AeroSpace with trackpad swipesmacOS (ARM)
defaultbrowserUtility to set the default browser on macOSmacOS (ARM)
dimclientPython client for DIM (DNS and IP Management)Linux, macOS (ARM), Linux (ARM)
ghostty-tip 👻 Ghostty is a fast, feature-rich, and cross-platform terminal emulator that uses platform-native UI and GPU acceleration. macOS (ARM)
kubernetes-mcp-serverKubernetes MCP server for AI tools to interact with Kubernetes clustersmacOS (ARM), Linux, Linux (ARM)
ndcliCommand line interface for DIM (DNS and IP Management)Linux, macOS (ARM), Linux (ARM)
nixupdaterMenu bar app to check for updates on macOSmacOS (ARM)
opsopsA simple tool for managing secrets (with 1password integration)macOS (ARM), Linux (ARM), Linux
podman-mac-helperHelper binary for running Podman on macOSmacOS (ARM)
prlspLSP server that surfaces GitHub PR review comments as editor diagnosticsmacOS (ARM), Linux, Linux (ARM)
prlsp-nvimNeovim plugin for prlsp — view and reply to GitHub PR review comments via LSPLinux, macOS (ARM), Linux (ARM)
prometheus-mcp-serverMCP server for Prometheus integrationLinux, Linux (ARM), macOS (ARM)
raycast-betaControl your tools with a few keystrokes - beta releasemacOS (ARM)
skhd_zigSimple Hotkey Daemon for macOS, ported from skhd by koekeishiyamacOS (ARM)
yabaiTiling window manager for macOS based on binary space partitioningmacOS (ARM)

Requirements

  • Nix with flakes enabled
  • For Home Manager modules: Home Manager
  • For NixOS modules: NixOS system
  • For Darwin modules: nix-darwin

programs.aerospace-swipe.enable

Whether to enable aerospace-swipe configuration.

Type: boolean

Default:

false

Example:

true

Declared by:

modules/home/aerospace-swipe.nix
programs.aerospace-swipe.fingers

Number of fingers needed for swipe

Type: signed integer

Default:

3

Example:

"4"

Declared by:

modules/home/aerospace-swipe.nix
programs.aerospace-swipe.haptic

Enable haptic feedback

Type: boolean

Default:

false

Example:

"true"

Declared by:

modules/home/aerospace-swipe.nix
programs.aerospace-swipe.natural_swipe

Enable natural swipe

Type: boolean

Default:

false

Example:

"true"

Declared by:

modules/home/aerospace-swipe.nix
programs.aerospace-swipe.skip_empty

Skip empty workspaces

Type: boolean

Default:

true

Example:

"false"

Declared by:

modules/home/aerospace-swipe.nix
programs.aerospace-swipe.wrap_around

Wrap around workpsace

Type: boolean

Default:

true

Example:

"false"

Declared by:

modules/home/aerospace-swipe.nix
programs.default-browser.enable

Whether to enable Default browser configuration.

Type: boolean

Default:

false

Example:

true

Declared by:

modules/home/default-browser.nix
programs.default-browser.browser

The browser to set as default

Type: string

Default:

""

Example:

"firefox"

Declared by:

modules/home/default-browser.nix
programs.ndcli.enable

Whether to enable ndcli command line tool.

Type: boolean

Default:

false

Example:

true

Declared by:

modules/home/ndcli.nix
programs.ndcli.server

DIM server URL

Type: string

Default:

"http://localhost:5000"

Declared by:

modules/home/ndcli.nix
programs.ndcli.username

Username for DIM authentication

Type: string

Default:

{
  _type = "override";
  content = "";
  priority = 1000;
}

Declared by:

modules/home/ndcli.nix
programs.nixupdater.enable

Whether to enable nixupdater configuration.

Type: boolean

Default:

false

Example:

true

Declared by:

modules/home/nixupdater.nix
programs.nixupdater.command

Command to run when updates are available. Can be used to trigger a notification or directly apply updates

Type: string

Default:

"jinx update"

Example:

"darwin-rebuild switch --flake .#my-mac"

Declared by:

modules/home/nixupdater.nix
programs.nixupdater.flake

Sets the flake path.

Type: string

Default:

""

Example:

"/Users/alice/other-dotfiles"

Declared by:

modules/home/nixupdater.nix
programs.nixupdater.interval

Set the interval in seconds for checking for updates

Type: signed integer

Default:

1800

Example:

"300"

Declared by:

modules/home/nixupdater.nix
programs.nixupdater.terminal

Terminal to use for running the update command. Options: terminal macOS Terminal.app iterm iTerm2 kitty new kitty window (default) kitty-tab new tab in the running kitty instance * kitty-overlay overlay in the focused kitty window * alacritty ghostty

  • kitty-tab and kitty-overlay use kitty’s remote-control protocol (kitty @ new-window). They require allow_remote_control yes in kitty.conf, or kitty launched with --listen-on / KITTY_LISTEN_ON. Falls back to a new kitty window when no running instance is found.

Type: one of “terminal”, “iterm”, “kitty”, “kitty-tab”, “kitty-overlay”, “alacritty”, “ghostty”

Default:

"kitty"

Example:

"kitty-overlay"

Declared by:

modules/home/nixupdater.nix
programs.raycast.enable

Whether to enable Raycast configuration management.

Type: boolean

Default:

false

Example:

true

Declared by:

modules/home/raycast
programs.raycast.anonymousId

Anonymous ID (UUID)

Type: string

Default:

"00000000-0000-0000-0000-000000000000"

Declared by:

modules/home/raycast
programs.raycast.automationHotkey

AppleScript modifier keys for the Raycast automation hotkey. Used by the raycast-import-config script to open Raycast.

Common values:

  • “option down” for Option+Space

  • “command down” for Cmd+Space

  • “control down” for Ctrl+Space

Must match your Raycast global hotkey setting.

Type: string

Default:

"option down"

Example:

"command down"

Declared by:

modules/home/raycast
programs.raycast.configFile

Path to a JSON file containing Raycast configuration. This takes precedence over both settings and declarative options.

The JSON file should be an exported Raycast configuration that has been decrypted and decompressed.

Example: programs.raycast.configFile = ./raycast-export.json;

Type: null or absolute path

Default:

null

Example:

./raycast-config.json

Declared by:

modules/home/raycast
programs.raycast.encryptionPassword

Password to encrypt the .rayconfig file with AES-256-CBC. If null, the file will be generated unencrypted (gzipped only). Raycast can import both encrypted and unencrypted files.

Type: null or string

Default:

null

Example:

"12345678"

Declared by:

modules/home/raycast
programs.raycast.extraConfig

Extra configuration merged into the generated JSON

Type: attribute set

Default:

{ }

Example:

{
  builtin_package_github = {
    provider_schemaVersion = 1;
    repositories = ["owner/repo"];
  };
}

Declared by:

modules/home/raycast
programs.raycast.fallbackSearches

Enabled fallback search identifiers

Type: list of string

Default:

[
  "builtin_command_fileSearch_fallbackSearch"
  "builtin_command_extensionStore_fallbackSearch"
  "builtin_command_searchSnippets_fallbackSearch"
  "builtin_command_dictionary_defineWord_fallbackSearch"
  "builtin_command_translate_fallbackSearch"
  "builtin_command_searchEmoji_fallbackSearch"
  "builtin_command_searchMenuItems_fallbackSearch"
]

Declared by:

modules/home/raycast
programs.raycast.floatingNotes

Floating notes configuration

Type: list of (attribute set)

Default:

[ ]

Declared by:

modules/home/raycast
programs.raycast.installationDate

Installation date in ISO 8601 format

Type: string

Default:

"2024-01-01T00:00:00Z"

Declared by:

modules/home/raycast
programs.raycast.installedExtensions

List of installed native extension identifiers

Type: list of string

Default:

[ ]

Example:

[
  "builtin_package_media"
]

Declared by:

modules/home/raycast
programs.raycast.outputPath

Where to place the generated .rayconfig file

Type: string

Default:

"$HOME/.config/raycast/import.rayconfig"

Declared by:

modules/home/raycast
programs.raycast.preferences.advanced.keepWindowVisibleOnResign

Keep window visible when resigning

Type: boolean

Default:

false

Declared by:

modules/home/raycast
programs.raycast.preferences.advanced.navigationStyle

Navigation command style

Type: string

Default:

"macos"

Declared by:

modules/home/raycast
programs.raycast.preferences.advanced.popToRootTimeout

Pop to root timeout in seconds

Type: signed integer

Default:

90

Declared by:

modules/home/raycast
programs.raycast.preferences.advanced.windowPresentationMode

Window presentation mode (0 = default)

Type: signed integer

Default:

0

Declared by:

modules/home/raycast
programs.raycast.preferences.appearance.showFavoritesInCompactMode

Show favorites in compact mode

Type: boolean

Default:

true

Declared by:

modules/home/raycast
programs.raycast.preferences.appearance.statusBarVisible

Show Raycast in menu bar

Type: boolean

Default:

true

Declared by:

modules/home/raycast
programs.raycast.preferences.appearance.textSize

Preferred text size

Type: one of “small”, “medium”, “large”

Default:

"medium"

Declared by:

modules/home/raycast
programs.raycast.preferences.appearance.windowMode

Window mode

Type: one of “default”, “compact”

Default:

"default"

Declared by:

modules/home/raycast
programs.raycast.preferences.general.alternativeEscape

Use alternative escape behavior

Type: boolean

Default:

false

Declared by:

modules/home/raycast
programs.raycast.preferences.general.globalHotkey

Global hotkey to open Raycast (e.g., ‘Command-49’ for Cmd+Space)

Type: string

Default:

"Command-49"

Example:

"Option-49"

Declared by:

modules/home/raycast
programs.raycast.settings

Complete Raycast configuration as an attribute set. When set, this takes precedence over the declarative options. Use this to import an existing configuration exported from Raycast.

Note: If configFile is set, it takes precedence over this option.

Type: null or (attribute set)

Default:

null

Example:

{
  raycast_version = "1.79.1";
  builtin_package_raycastPreferences = {
    # ...
  };
}

Declared by:

modules/home/raycast
programs.raycast.snippets

Raycast snippets

Type: list of (attribute set)

Default:

[ ]

Example:

[
  {
    name = "Email";
    text = "user@example.com";
    keyword = "email";
  }
]

Declared by:

modules/home/raycast
programs.raycast.version

Raycast version string

Type: string

Default:

"1.0.0"

Declared by:

modules/home/raycast

Known Issues

Claude Code deduplicates MCP servers by command path

Home Manager provides a programs.mcp.servers option for configuring MCP servers. When multiple servers use the same binary (e.g. two instances of prometheus-mcp-server pointed at different clusters), Claude Code (v2.1.71+) incorrectly treats them as duplicates and silently drops all but one — even when their environment variables differ.

Workaround: wrap each server in a pkgs.writeShellScriptBin stub so each entry gets a unique store path:

let
  mkWrapper = name:
    pkgs.writeShellScriptBin "prometheus-mcp-server-${name}" ''
      exec ${pkgs.prometheus-mcp-server}/bin/prometheus-mcp-server "$@"
    '';
in {
  programs.mcp.servers = {
    "prometheus/cluster-a" = {
      command = "${mkWrapper "cluster-a"}/bin/prometheus-mcp-server-cluster-a";
      args = [];
      env.PROMETHEUS_URL = "https://prometheus.cluster-a.example.com";
    };
    "prometheus/cluster-b" = {
      command = "${mkWrapper "cluster-b"}/bin/prometheus-mcp-server-cluster-b";
      args = [];
      env.PROMETHEUS_URL = "https://prometheus.cluster-b.example.com";
    };
  };
}

Tracked upstream at anthropics/claude-code#32549.

Raycast Configuration Module

A Home Manager module for declarative Raycast configuration management using Nix. This module generates native .rayconfig files that can be imported directly into Raycast, enabling reproducible configuration across machines.

Overview

This module provides three approaches to managing Raycast configuration:

  1. Declarative Configuration - Define settings directly in Nix using structured options

  2. File Import - Import existing .rayconfig exports as JSON files

  3. Attribute Set - Use Nix attribute sets for full configuration control

The module handles encryption, compression, and format conversion automatically, producing .rayconfig files compatible with Raycast’s native import functionality.

Features

  • Installs Raycast Beta (0.61.0.0) when module is enabled

  • Declarative configuration of Raycast preferences, snippets, and extensions

  • Import and export existing Raycast configurations

  • Automatic .rayconfig file generation with proper encryption

  • Scrypt + AES-256-GCM encryption support

  • Helper utilities for config inspection and conversion

  • Automated import via AppleScript (macOS only)

  • No external dependencies beyond standard Nix tools

Installation

Add the nixkit flake to your Home Manager configuration and import the Raycast module:

{
  inputs = {
    nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
    nixkit.url = "github:frostplexx/nixkit";
  };

  outputs = { nixpkgs, nixkit, ... }: {
    homeConfigurations.username = home-manager.lib.homeManagerConfiguration {
      modules = [
        nixkit.homeManagerModules.default
        ./home.nix
      ];
    };
  };
}

Quick Start

Basic Configuration

Enable the module and define basic preferences. The module will automatically install Raycast Beta (0.61.0.0) to /Applications/Raycast Beta.app:

programs.raycast = {
  enable = true;

  preferences = {
    general.globalHotkey = "Option-49";
    appearance = {
      textSize = "medium";
      statusBarVisible = true;
    };
  };

  snippets = [
    {
      name = "Email Signature";
      text = "user@example.com";
      keyword = "email";
    }
  ];
};

Note: Raycast is unfree software. Ensure your NixOS configuration allows unfree packages:

nixpkgs.config.allowUnfree = true;

Apply and Import

After running home-manager switch, import the generated configuration:

# Automated import (requires Accessibility permissions)
raycast-import-config

# Manual import
# 1. Open Raycast
# 2. Navigate to Settings → Advanced → Import Settings & Data
# 3. Select ~/.config/raycast/import.rayconfig

Configuration Methods

Method 1: Declarative Configuration

Define Raycast settings directly in Nix using structured options. This approach provides type safety and validation.

programs.raycast = {
  enable = true;
  version = "1.79.1";

  preferences = {
    general = {
      globalHotkey = "Command-49";
      alternativeEscape = false;
    };

    appearance = {
      statusBarVisible = true;
      textSize = "medium";        # Options: "small" | "medium" | "large"
      windowMode = "default";     # Options: "default" | "compact"
      showFavoritesInCompactMode = true;
    };

    advanced = {
      navigationStyle = "macos";
      popToRootTimeout = 90;
      keepWindowVisibleOnResign = false;
    };
  };

  snippets = [
    {
      name = "Shrug";
      text = "¯\\_(ツ)_/¯";
      keyword = "shrug";
    }
  ];

  fallbackSearches = [
    "builtin_command_fileSearch_fallbackSearch"
    "builtin_command_searchEmoji_fallbackSearch"
  ];

  encryptionPassword = "your-password";  # Optional
};

Method 2: Import from JSON File

Import an existing Raycast export. This is the recommended approach for migrating existing configurations.

programs.raycast = {
  enable = true;
  configFile = ./raycast-config.json;
  
  # Re-encrypt with a different password (optional)
  encryptionPassword = "new-password";
};

Method 3: Attribute Set Import

Use Nix expressions to load and manipulate configuration programmatically.

programs.raycast = {
  enable = true;
  settings = builtins.fromJSON (builtins.readFile ./raycast-export.json);
  encryptionPassword = "password";
};

Advanced Configuration

Extend the configuration with custom package settings:

programs.raycast = {
  enable = true;
  preferences.general.globalHotkey = "Option-49";
  
  extraConfig = {
    builtin_package_github = {
      provider_schemaVersion = 1;
      repositories = ["owner/repo1" "owner/repo2"];
    };
    builtin_package_linear = {
      provider_schemaVersion = 1;
      teamIds = ["team-id-1"];
    };
  };
};

Command-Line Utilities

The module provides several command-line utilities for working with .rayconfig files. The decrypt and encrypt utilities are always available, even when the module is disabled.

raycast-decrypt-config

Decrypt and inspect .rayconfig files.

Syntax:

raycast-decrypt-config <input.rayconfig> [password] [output.json]

Examples:

# Decrypt with default password
raycast-decrypt-config export.rayconfig

# Decrypt with custom password
raycast-decrypt-config export.rayconfig mysecret output.json

# Process unencrypted file
raycast-decrypt-config export.rayconfig "" output.json

The decrypted JSON can be used with configFile or modified and re-imported.

raycast-encrypt-config

Create .rayconfig files from JSON configuration.

Syntax:

raycast-encrypt-config <input.json> [password] [output.rayconfig]

Examples:

# Create unencrypted .rayconfig
raycast-encrypt-config config.json

# Create encrypted .rayconfig
raycast-encrypt-config config.json your-password

# Specify custom output path
raycast-encrypt-config config.json password output.rayconfig

raycast-import-config

Automate the Raycast import process using AppleScript. Available only when the module is enabled.

Syntax:

raycast-import-config

This utility:

  1. Activates Raycast

  2. Invokes the configured global hotkey

  3. Searches for “Import Settings & Data”

  4. Attempts to automatically select the configuration file

Requirements:

  • macOS Accessibility permissions for your terminal emulator

  • Correct automationHotkey configuration

Configuration:

programs.raycast = {
  automationHotkey = "option down";  # Must match Raycast global hotkey
};

Hotkey Values:

  • "option down" - Option+Space (default)

  • "command down" - Cmd+Space

  • "control down" - Ctrl+Space

Exporting Existing Configuration

To migrate your current Raycast configuration to this module:

Step 1: Export from Raycast

  1. Open Raycast

  2. Search for “Export Settings & Data”

  3. Choose whether to encrypt (optional, recommended for sensitive data)

  4. Save the .rayconfig file

Step 2: Decrypt the Export

Convert the .rayconfig file to JSON:

raycast-decrypt-config ~/Downloads/Raycast-2026-05-27.rayconfig [password]

This produces Raycast-2026-05-27.json containing the configuration data.

Step 3: Import to Nix

Reference the decrypted JSON in your configuration:

programs.raycast = {
  enable = true;
  configFile = ./Raycast-2026-05-27.json;
  
  # Optionally re-encrypt with a new password
  encryptionPassword = "new-password";
};

Alternatively, use an attribute set for programmatic manipulation:

programs.raycast = {
  enable = true;
  settings = builtins.fromJSON (builtins.readFile ./Raycast-2026-05-27.json);
};

Module Options Reference

Core Options

programs.raycast.enable
  • Type: boolean

  • Default: false

Enable Raycast configuration management. When enabled, the module generates a .rayconfig file at the specified output path.

programs.raycast.version
  • Type: string

  • Default: "1.0.0"

Raycast version string included in the generated configuration metadata.

programs.raycast.installationDate
  • Type: string

  • Default: "2024-01-01T00:00:00Z"

Installation timestamp in ISO 8601 format.

programs.raycast.anonymousId
  • Type: string

  • Default: "00000000-0000-0000-0000-000000000000"

Anonymous identifier (UUID format).

Configuration Sources

These options are mutually exclusive, with priority order: configFile > settings > declarative options.

programs.raycast.configFile
  • Type: null or path

  • Default: null

  • Example: ./raycast-export.json

Path to a JSON file containing complete Raycast configuration. This is the recommended approach for importing existing configurations.

programs.raycast.settings
  • Type: null or attribute set

  • Default: null

Complete Raycast configuration as a Nix attribute set. Use this when you need to programmatically manipulate configuration.

Declarative Options

programs.raycast.preferences
  • Type: attribute set

  • Default: {}

Structured Raycast preferences organized into three categories:

preferences.general

  • globalHotkey (string): Keyboard shortcut (e.g., “Command-49”)

  • alternativeEscape (boolean): Enable alternative escape behavior

preferences.appearance

  • statusBarVisible (boolean): Show Raycast in menu bar

  • textSize (enum): “small” | “medium” | “large”

  • windowMode (enum): “default” | “compact”

  • showFavoritesInCompactMode (boolean)

preferences.advanced

  • windowPresentationMode (integer): Window presentation mode

  • navigationStyle (string): Navigation command style

  • popToRootTimeout (integer): Timeout in seconds

  • keepWindowVisibleOnResign (boolean)

programs.raycast.snippets
  • Type: list of attribute sets

  • Default: []

Text snippets configuration. Each snippet requires:

  • name (string): Display name

  • text (string): Snippet content

  • keyword (string): Trigger keyword

programs.raycast.fallbackSearches
  • Type: list of strings

  • Default: (includes file search, emoji search, etc.)

List of enabled fallback search identifiers.

programs.raycast.installedExtensions
  • Type: list of strings

  • Default: []

Native extension identifiers to mark as installed.

programs.raycast.floatingNotes
  • Type: list of attribute sets

  • Default: []

Floating notes configuration.

programs.raycast.extraConfig
  • Type: attribute set

  • Default: {}

Additional configuration merged into the generated JSON. Use this for package-specific settings not covered by other options.

Security Options

programs.raycast.encryptionPassword
  • Type: null or string

  • Default: null

Password for encrypting the .rayconfig file using Scrypt + AES-256-GCM. When null, the file is generated unencrypted (gzip only).

Automation Options

programs.raycast.automationHotkey
  • Type: string

  • Default: "option down"

AppleScript key modifier for automated import. Must match your Raycast global hotkey configuration.

programs.raycast.outputPath
  • Type: string

  • Default: "$HOME/.config/raycast/import.rayconfig"

Output path for the generated .rayconfig file.

Technical Specification

File Format

The .rayconfig file is a gzipped JSON file with the following structure:

{
  "exportedAt": "2026-05-27T06:38:52.663Z",
  "appVersion": "0.61.0.0",
  "osName": "macOS",
  "osVersion": "26.5.0",
  "osArch": "arm64",
  "schemaVersion": 2,
  "data": "<hex-encoded encrypted data>",
  "encryption": {
    "iv": "<hex-encoded initialization vector>",
    "salt": "<hex-encoded salt>",
    "authTag": "<hex-encoded authentication tag>"
  }
}

Encryption Process

When encryption is enabled:

  1. Compress: The configuration JSON is gzipped

  2. Derive Key: Scrypt key derivation with parameters:

    • N = 16384

    • r = 8

    • p = 1

    • Key length = 32 bytes

  3. Encrypt: AES-256-GCM encryption with:

    • 12-byte random initialization vector

    • 16-byte random salt

    • 16-byte authentication tag

  4. Encode: Ciphertext and metadata are hex-encoded

  5. Wrap: Metadata wrapper JSON is created

  6. Compress: Final JSON is gzipped to produce .rayconfig

Unencrypted Format

For unencrypted configurations:

  1. Configuration JSON is gzipped and hex-encoded

  2. Placed in the data field without encryption metadata

  3. Wrapper JSON is gzipped to produce .rayconfig

Both encrypted and unencrypted .rayconfig files can be imported by Raycast.

Troubleshooting

Build Failures

Module not found or import errors

Ensure nixkit is properly added to your flake inputs and imported in your Home Manager configuration:

imports = [ nixkit.homeManagerModules.default ];

Python dependency errors

The module requires Python 3 with the cryptography library. This is automatically provided by Nix and should not require manual intervention.

Import Issues

Automated import not working

  1. Verify Accessibility permissions:

    • Open System Settings → Privacy & Security → Accessibility

    • Grant permission to your terminal emulator (Terminal, iTerm2, etc.)

  2. Confirm hotkey configuration matches Raycast settings:

    programs.raycast.automationHotkey = "option down";
    
  3. Verify the configuration file exists:

    ls -lh ~/.config/raycast/import.rayconfig
    
  4. Test file validity:

    raycast-decrypt-config ~/.config/raycast/import.rayconfig
    
  5. Fall back to manual import if automation fails

Import fails with decryption error

If Raycast reports a decryption error:

  1. Verify the password is correct:

    raycast-decrypt-config ~/.config/raycast/import.rayconfig your-password
    
  2. Check the file is not corrupted:

    gunzip -c ~/.config/raycast/import.rayconfig | jq .
    
  3. Regenerate the configuration with home-manager switch

Decryption Errors

Wrong password

Ensure you’re using the correct password from the original export:

raycast-decrypt-config export.rayconfig CORRECT_PASSWORD output.json

Corrupted file

Verify the file is valid gzipped JSON:

gunzip -c export.rayconfig | jq empty

Configuration Issues

Settings not applying

The module generates .rayconfig files but does not automatically import them. You must:

  1. Run home-manager switch to generate the file

  2. Import the file into Raycast (automated or manual)

  3. Restart Raycast if settings don’t take effect immediately

Encryption password stored in plain text

The encryptionPassword option stores the password in the Nix store, which is world-readable. Consider:

  • Using an unencrypted configuration if no sensitive data is present

  • Managing secrets with a dedicated secrets management solution

  • Understanding that the encryption primarily protects the file at rest, not in the Nix store

Security Considerations

Password Storage

The encryptionPassword option stores passwords in the Nix store, which is world-readable. This presents several security implications:

  • Nix Store Visibility: All users on the system can read the Nix store

  • Build Logs: Passwords may appear in build outputs

  • Git History: Committed passwords remain in version control history

Recommendations:

  1. Omit encryption if your configuration contains no sensitive data

  2. Use secrets management solutions like sops-nix or agenix for production environments

  3. Understand the threat model: The encryption primarily protects exported files, not the configuration source

Sensitive Data

Raycast configurations may contain:

  • API tokens for extensions

  • Workspace identifiers

  • Custom script contents

  • Search history

Review your configuration before committing it to version control or sharing publicly.

  • nixkit - NixOS modules collection containing this module

  • Home Manager - User environment manager for NixOS

  • Raycast - Extensible macOS launcher

References

Contributing

Issues and pull requests are welcome at the nixkit repository. When reporting issues, please include:

  • Your NixOS and Home Manager versions

  • Relevant configuration snippets

  • Error messages or unexpected behavior

  • Steps to reproduce

License

This module is part of nixkit. See the main repository for license information.