Skip to content

Home Applications

NullString1 edited this page Jan 13, 2026 · 1 revision

Home Applications

User-level applications managed through Home Manager in NullOS.

Overview

Home Manager applications are user-specific and don't require sudo to install. They're defined in home/default.nix and individual module files.

Rebuild command:

home-manager switch --flake .

Or rebuild entire system (includes home-manager):

sudo nixos-rebuild switch --flake .#hostname

Current Home Packages

Desktop Applications

Web Browsers:

  • Configured via vars.browser in variables.nix
  • Common: Brave, Firefox, Chromium

Communication:

  • Discord
  • Slack (if enabled)
  • Signal Desktop

Media:

  • Spotify
  • VLC
  • MPV

Productivity:

  • VSCode (configured in home/vscode.nix)
  • Obsidian
  • LibreOffice

Terminal Applications

File Management:

  • yazi - Terminal file manager (configured in home/yazi/)
  • bat - Cat alternative with syntax highlighting
  • eza - Modern ls replacement
  • zoxide - Smart directory jumper

System Info:

  • fastfetch - System information display (configured in home/fastfetch/)
  • bottom - Process/system monitor

Shell Tools:

  • tealdeer - Fast tldr client
  • ripgrep - Fast grep
  • fd - Fast find
  • fzf - Fuzzy finder

Development Tools

Editors:

  • neovim - Via NVF (configured in home/nvf.nix)
  • vscode - With extensions

Version Control:

  • gh - GitHub CLI (configured in home/gh.nix)
  • Git configured in home/git.nix

Tools:

  • docker-compose
  • kubectl
  • Language-specific tools (per project)

Configured Programs

Programs with full Home Manager modules:

Terminal Emulator

Ghostty (home/ghostty.nix):

programs.ghostty = {
  enable = true;
  settings = {
    font-family = "JetBrainsMono Nerd Font";
    font-size = 12;
    theme = "gruvbox";
  };
};

Shell

Zsh (home/zsh/):

programs.zsh = {
  enable = true;
  enableCompletion = true;
  autosuggestion.enable = true;
  syntaxHighlighting.enable = true;
  
  oh-my-zsh = {
    enable = true;
    plugins = [ "git" "sudo" ];
  };
};

Prompt

Starship (home/starship.nix):

programs.starship = {
  enable = true;
  settings = {
    format = "$all";
    # Custom configuration
  };
};

File Manager

Yazi (home/yazi/):

programs.yazi = {
  enable = true;
  enableZshIntegration = true;
  settings = {
    manager = {
      show_hidden = true;
      sort_by = "natural";
    };
  };
};

Version Control

Git (home/git.nix):

programs.git = {
  enable = true;
  userName = vars.gitUsername;
  userEmail = vars.gitEmail;
  
  extraConfig = {
    init.defaultBranch = "main";
    pull.rebase = true;
  };
};

GitHub CLI (home/gh.nix):

programs.gh = {
  enable = true;
  settings = {
    git_protocol = "ssh";
    prompt = "enabled";
  };
};

Text Tools

Bat (home/bat.nix):

programs.bat = {
  enable = true;
  config = {
    theme = "gruvbox-dark";
    paging = "never";
  };
};

Eza (home/eza.nix):

programs.eza = {
  enable = true;
  enableZshIntegration = true;
  git = true;
  icons = true;
};

Directory Navigation

Zoxide (home/zoxide.nix):

programs.zoxide = {
  enable = true;
  enableZshIntegration = true;
};

Desktop Environment

Window Manager

Hyprland (home/hyprland/):

  • Core settings
  • Keybindings
  • Window rules
  • Animations
  • Scratchpads

See Hyprland for details.

Status Bar

Waybar (home/waybar/):

  • System information
  • Workspace indicators
  • System tray
  • Custom modules

See Waybar for details.

Notifications

SwayNC (home/swaync.nix):

services.swaync = {
  enable = true;
  settings = {
    positionX = "right";
    positionY = "top";
  };
};

OSD

SwayOSD (home/swayosd.nix):

services.swayosd = {
  enable = true;
};

Application Launcher

Rofi (home/rofi/): See Rofi for details.


Theme Management

Stylix (home/stylix.nix):

Automatic theming for:

  • GTK applications
  • Qt applications
  • Terminal colors
  • Editor themes
  • Cursor theme

See Theming for details.


Optional Applications

Office Suite

LibreOffice (home/office.nix):

home.packages = with pkgs; [
  libreoffice-fresh
];

Wine/Bottles

Bottles (home/bottles.nix):

home.packages = with pkgs; [
  bottles
];

Display Management

nwg-displays (home/nwg-displays.nix):

home.packages = with pkgs; [
  nwg-displays
];

Screenshot Tools

Swappy (home/swappy.nix):

home.packages = with pkgs; [
  swappy
  grim
  slurp
];

Adding Home Packages

Simple Package

Edit home/default.nix:

home.packages = with pkgs; [
  # Existing packages...
  
  # Add new package
  discord
  spotify
  vlc
];

With Configuration

Create dedicated file (e.g., home/firefox.nix):

{ config, pkgs, ... }:

{
  programs.firefox = {
    enable = true;
    
    profiles.default = {
      settings = {
        "browser.startup.homepage" = "about:blank";
      };
      
      bookmarks = [
        {
          name = "NixOS";
          url = "https://nixos.org";
        }
      ];
    };
  };
}

Import in home/default.nix:

imports = [
  ./firefox.nix
];

Package Categories

Communication

home.packages = with pkgs; [
  discord
  slack
  telegram-desktop
  signal-desktop
  zoom-us
  teams-for-linux
];

Media & Entertainment

home.packages = with pkgs; [
  spotify
  vlc
  mpv
  rhythmbox
  
  # Image editing
  gimp
  inkscape
  
  # Video editing
  kdenlive
  obs-studio
];

Productivity

home.packages = with pkgs; [
  obsidian
  notion-app-enhanced
  
  # Office
  libreoffice-fresh
  onlyoffice-bin
  
  # PDF
  okular
  zathura
];

Development

home.packages = with pkgs; [
  vscode
  postman
  dbeaver
  
  # Containers
  docker-compose
  kubectl
  k9s
];

XDG Configuration

XDG Directories (home/xdg.nix):

xdg = {
  enable = true;
  
  userDirs = {
    enable = true;
    createDirectories = true;
    
    desktop = "${config.home.homeDirectory}/Desktop";
    documents = "${config.home.homeDirectory}/Documents";
    download = "${config.home.homeDirectory}/Downloads";
    music = "${config.home.homeDirectory}/Music";
    pictures = "${config.home.homeDirectory}/Pictures";
    videos = "${config.home.homeDirectory}/Videos";
  };
  
  mimeApps = {
    enable = true;
    defaultApplications = {
      "text/html" = "firefox.desktop";
      "application/pdf" = "okular.desktop";
      "image/png" = "eog.desktop";
    };
  };
};

GTK & Qt Configuration

GTK (home/gtk.nix)

gtk = {
  enable = true;
  
  iconTheme = {
    name = "Papirus-Dark";
    package = pkgs.papirus-icon-theme;
  };
  
  gtk3.extraConfig = {
    gtk-application-prefer-dark-theme = true;
  };
  
  gtk4.extraConfig = {
    gtk-application-prefer-dark-theme = true;
  };
};

Qt (home/qt.nix)

qt = {
  enable = true;
  platformTheme.name = "gtk";
  style.name = "adwaita-dark";
};

User Services

Home Manager can manage user systemd services:

systemd.user.services.my-service = {
  Unit = {
    Description = "My User Service";
  };
  
  Service = {
    ExecStart = "${pkgs.my-package}/bin/my-command";
    Restart = "always";
  };
  
  Install = {
    WantedBy = [ "default.target" ];
  };
};

Per-Machine Home Packages

# In home/default.nix
home.packages = with pkgs; [
  # Common packages
  firefox
  vscode
] ++ lib.optionals (vars.hostname == "nslapt") [
  # Laptop only
  brightnessctl
] ++ lib.optionals (vars.hostname == "nspc") [
  # Desktop only
  obs-studio
  davinci-resolve
];

Session Variables

home.sessionVariables = {
  EDITOR = "nvim";
  VISUAL = "code";
  BROWSER = "firefox";
  TERMINAL = "ghostty";
  
  # Custom variables
  MY_VAR = "value";
};

Home Files

Deploy configuration files:

home.file = {
  ".config/app/config.toml".text = ''
    setting = "value"
  '';
  
  ".local/bin/my-script" = {
    executable = true;
    text = ''
      #!/usr/bin/env bash
      echo "Hello"
    '';
  };
};

Checking Installed Packages

List Home Packages

home-manager packages

Search Path

echo $PATH | tr ':' '\n'

Which Package Provides

which firefox
readlink $(which firefox)

Removing Home Packages

Edit home/default.nix and remove package:

home.packages = with pkgs; [
  firefox
  # discord  # Removed
];

Rebuild:

home-manager switch --flake .

Troubleshooting

Package Conflicts

home.packages = [
  (pkgs.package1.override {
    # Override dependencies
  })
];

Collision Between Files

Use priority:

home.packages = [
  (pkgs.package1.overrideAttrs (old: {
    meta = old.meta // { priority = 0; };
  }))
  pkgs.package2  # Lower priority (10 default)
];

Service Won't Start

systemctl --user status service-name
journalctl --user -u service-name

Best Practices

  1. Organize by Category - Group related packages
  2. Use Program Modules - When available
  3. Comment Your Additions - Note why installed
  4. Test Before Committing - Build first
  5. Keep Clean - Remove unused packages

Next Steps

Clone this wiki locally