CCE

Applications I Use

Contents

Application Listing

I have this crappy mkNixGlWrapper thing that I wrote a long time ago to ensure that applications installed in home-manager would have nixGL injected in to it if necessary, I wonder how much that is necessary now.

Getting Things Done

nix:tangle ~/nix/hm/applications-production.nix
{ pkgs, lib, ... }:
let mkNixGLWrapper = pkgs.lib.mkNixGLWrapper;
in {
  home.packages = with pkgs; [
    kdePackages.gwenview
    kdePackages.okular
    # kdePackages.kamoso
    libreoffice-qt
    kdePackages.kteatime
    zbar

    (mkNixGLWrapper { name="stellarium"; })
    kstars

    virt-manager
    libvirt
    gparted
    kdePackages.partitionmanager
    kdePackages.qttools

    # kdePackages.kontact
    # kdePackages.kaccounts-integration
    # kdePackages.akonadi
    # kdePackages.akonadiconsole
    # kdePackages.kdepim-runtime
    # kdePackages.kdepim-addons
    heroku
    graphviz
  ];
}

Media

nix:tangle ~/nix/hm/applications-media.nix
{ pkgs, lib, ... }:
let mkNixGLWrapper = pkgs.lib.mkNixGLWrapper;
in {
  programs.mpv.enable = true;
  programs.mpv.package = mkNixGLWrapper { name="mpv"; };

  home.packages = with pkgs; [
    kdePackages.ktorrent
    (mkNixGLWrapper {
      name = "calibre";
      pkg = (calibre.override { unrarSupport = true; });
    })

    (mkNixGLWrapper { name="gimp"; })
    (mkNixGLWrapper { name="kdenlive"; pkg=kdePackages.kdenlive; })
    (mkNixGLWrapper { name="digikam"; })
    (mkNixGLWrapper { name="simplescreenrecorder"; })

    (mkNixGLWrapper { name="xournalpp"; })

    pavucontrol
    (mkNixGLWrapper { name="vlc"; })
    yt-dlp
    transmission-remote-gtk
  ];

  programs.obs-studio = {
    enable = true;
    package = (mkNixGLWrapper { name="obs-studio"; });
    plugins = with pkgs.obs-studio-plugins; [
      wlrobs
      obs-backgroundremoval
      obs-pipewire-audio-capture
      obs-3d-effect
    ];
  };
}

Communications

nix:tangle ~/nix/hm/applications-comms.nix
{ pkgs, lib, ... }:
let mkNixGLWrapper = pkgs.lib.mkNixGLWrapper;
in with pkgs; {
  home.packages =  [
    (mkNixGLWrapper { name="element-desktop"; })
    (mkNixGLWrapper { name="neochat"; pkg=kdePackages.neochat; })
    (mkNixGLWrapper { name="nheko"; })
    (mkNixGLWrapper { name="discord"; })
    (mkNixGLWrapper { name="signal-desktop"; })
    (mkNixGLWrapper { name="tokodon"; pkg=kdePackages.tokodon; })

    (mkNixGLWrapper { name="zoom-us"; })
    # (mkNixGLWrapper { name="tdesktop"; }) # telegram-desktop
  ];

   xdg.mimeApps.defaultApplications = {
    "x-scheme-handler/signalcaptcha" = ["signal-desktop.desktop"];
    "x-scheme-handler/element" = ["element-desktop.desktop"];
    "x-scheme-handler/sgnl" = ["signal-desktop.desktop"];
  };
  home.file.".config/autostart/signal-desktop.desktop".source = "${pkgs.signal-desktop}/share/applications/signal-desktop.desktop";
  home.file.".config/autostart/discord.desktop" = {
    enable= false;
    source = "${discord}/share/applications/discord.desktop";
  };
  home.file.".config/autostart/element-desktop.desktop" = {
    enable = false;
    source = "${element-desktop}/share/applications/element-desktop.desktop";
  };
}

Tools

nix:tangle ~/nix/hm/applications-tools.nix
{ pkgs, lib, ... }:
let mkNixGLWrapper = pkgs.lib.mkNixGLWrapper;
in {
  home.file.".config/autostart/yakuake.desktop".source = "${pkgs.kdePackages.yakuake}/share/applications/org.kde.yakuake.desktop";

  home.packages = with pkgs; [
    kdePackages.ark
    kdePackages.dolphin
    kdePackages.filelight
    kdePackages.konsole
    kdePackages.yakuake
    kdePackages.bluedevil
    kdePackages.plasma-systemmonitor
    
    kdePackages.kio-fuse # to mount remote filesystems via FUSE
    kdePackages.kio-extras #extra protocols support (sftp, fish and more)
    
    okteta

    rclone

    blender

    arduino
  ];
}

htop

nix:tangle ~/nix/hm/applications-htop.nix
{ ... }:
{
  programs.htop = {
    enable = true;
    settings = {
      enable_mouse = true;
      hide_threads = true;
      highlight_base_name = true;
      hide_kernel_threads = 1;
      hide_userland_threads = 1;

      column_meters_0 = "LeftCPUs2 Blank Memory Swap PressureStallCPUSome PressureStallIOSome PressureStallMemorySome";
      column_meter_modes_0 = "1 2 1 1 2 2 2";
      column_meters_1 = "RightCPUs2 Blank Tasks LoadAverage Uptime Systemd DiskIO NetworkIO";
      column_meter_modes_1 = "1 2 2 2 2 2 2 2";
    };
  };
}

Gameing

nix:tangle ~/nix/hm/applications-gameing.nix:noweb yes
{ pkgs, lib, ... }:
let mkNixGLWrapper = pkgs.lib.mkNixGLWrapper;
in with pkgs; {
  home.packages = with pkgs; [
    cataclysm-dda
    (mkNixGLWrapper { name="moonlight-qt"; })
    # (mkNixGLWrapper { name="runelite"; })
    # (mkNixGLWrapper { name="ryujinx"; })
    # (mkNixGLWrapper { name="yuzu-mainline"; })
    (mkNixGLWrapper { name="endless-sky"; })
    (pkgs.callPackage ../pkgs/segarally.nix {})
    crawlTiles
  ];
}
nix:tangle ~/nix/pkgs/segarally.nix
{ pkgs, stdenv, lib }:

let wrapWine = (pkgs.callPackage ../lib/wrapWine.nix {});
in wrapWine {
  name = "segarally";
  executable = "$HOME/sync/Sega Rally 2 25th Anniversary v1.6.exe";
  # tricks = [ "vcrun2010" ];
}

The Rest

nix:tangle ~/nix/hm/applications.nix:noweb yes
{ inputs, config, pkgs, ... }:

with pkgs;
let mkNixGLWrapper = pkgs.lib.mkNixGLWrapper;
    unstable = import inputs.nixpkgs-unstable {
      system = pkgs.stdenv.hostPlatform.system;
      config.allowUnfree = true;
    };
in
{
  programs.chromium.enable = true;

  xdg.portal.enable = true;
  xdg.portal.extraPortals = with pkgs; [ kdePackages.xdg-desktop-portal-kde ];
  xdg.portal.config.common.default = [ "kde" ];
  xdg.portal.xdgOpenUsePortal = true;

  xdg.mimeApps.enable = true;

  home.sessionVariables = {
    ELECTRON_OZONE_PLATFORM_HINT = "auto"; # Electron should at least try to use Wayland, why is this not the default??
  };

  home.packages = [
    zip
    unzip
    bind.dnsutils
    cmark-gfm
    file
  ] ++ [
    unstable.jetbrains.idea
  ];
}
# calibre de-drm plugin for kobo
# (stdenv.mkDerivation {
#   name = "calibre_obok_dedrm";
#   src = fetchFromGitHub {
#     # https://github.com/lalmeras/DeDRM_tools/blob/Python3/make_release.py
#     owner = "lalmeras";
#     repo = "DeDRM_tools";
#     rev = "07591ff9421d53d0af1683c6100e538b93b17494";
#     sha256 = "1m8pia77bqgk3ghkp9nd6zkki71vl29wmdkkziwqw95a8mrfl0js";
#   };
#   installPhase = ''
#       export SOURCE_DATE_EPOCH=315532800;
#       ${python3}/bin/python3 make_release.py Python3
#     '';
# })

Note the use of my NixGL wrapper function mkNixGLWrapper.

Some of the things I need are setuid root or otherwise need to be installed in to My NixOS configuration via Arroyo Nixos

I only install these on my laptops.

nix:tangle ~/nix/nixos/applications.nix
{ config, pkgs, ... }:
{
  networking.firewall.allowedTCPPorts = [ 8080 ];

  services.avahi.enable = true;

  programs.browserpass.enable = true;
  programs.chromium.enable = true;
  programs.command-not-found.enable = true;
  programs.less.enable = true;
  programs.mtr.enable = true;
  programs.wireshark.enable = true;
  programs.steam.enable = true;
  programs.kdeconnect.enable = true;

  # fix cursors etc
  programs.dconf.enable = true;

  services.flatpak.enable = true;

  environment.systemPackages = (with pkgs; [
    vim # haha! yes!
    home-manager
    jq
    zip
    unzip
    pv
    tree
    android-tools
  ]);

  security.wrappers.plasma-systemmonitor = {
    source = "${pkgs.kdePackages.plasma-systemmonitor}/bin/plasma-systemmonitor";
    capabilities = "cap_net_raw+ep";
    owner = "root";
    group = "root";
  };

  # for OBS
  boot.extraModulePackages = with config.boot.kernelPackages; [
    v4l2loopback
  ];
  boot.extraModprobeConfig = ''
    options v4l2loopback devices=1 video_nr=1 card_label="OBS Cam" exclusive_caps=1
  '';
}

System CLI tools

nix:tangle ~/nix/nixos/applications-system-tools.nix
{ config, pkgs, ... }:
{
  programs.command-not-found.enable = true;
  programs.less.enable = true;
  programs.mtr.enable = true;
  programs.wireshark.enable = true;

  environment.systemPackages = (with pkgs; [
    vim # haha! yes!
    home-manager
    jq
    zip
    unzip
    pv
    tree
    pciutils
    usbutils
  ]);
}

Default KDE Application Configuration via Plasma Manager

nix:tangle ~/nix/hm/kde-config-applications.nix:noweb tangle
{ pkgs, config, ... }:

{
  programs.plasma.krunner = {
    activateWhenTypingOnDesktop = true;
    historyBehavior = "enableAutoComplete";
    position = "center";
  };
  programs.plasma.configFile.krunnerrc = {
    Plugins = {
      browserhistoryEnabled = "false";
      browsertabsEnabled = "false";
    };
  };
  programs.plasma.configFile = {
    <<table_str(apps_tbl)>>
  };
  <<font_str(font_tbl)>>
}

Applications

file group key value note
dolphinrc General FilterBar true Ctrl-i bound here by default
dolphinrc General BrowseThroughArchives true Browse in to zip, etc; I use "Extract To" context menu option instead of ark
dolphinrc General ConfirmClosingMultipleTabs false Always fresh Dolphin
dolphinrc General RememberOpenedTabs false Always fresh Dolphin
kteatime Tealist Tea0 Name 30s
kteatime Tealist Tea0 Time 30
kteatime Tealist Tea1 Name 45s
kteatime Tealist Tea1 Time 45
kteatime Tealist Tea2 Name 60s
kteatime Tealist Tea2 Time 60
kteatime Tealist Tea3 Name 90s
kteatime Tealist Tea3 Time 90
kteatime General PopupAutoHide false
kteatime General PopupAutoHideTime 30
kteatime General UsePopup true
kteatime General UseReminder false
kteatime General UseVisualize true
baloofilerc Basic Settings Indexing-Enabled false

KDE Font configuration

type family pointSize style
general Vulf Sans 10 normal
fixedWidth Vulf Mono 10 italic
menu Vulf Sans 10 normal
small Vulf Sans 8 normal
toolbar Vulf Sans 8 normal
windowTitle Vulf Sans 8 normal

Generated Configuration

See also How I use KDE Plasma (Primarily) with a Keyboard.

Those tables are transformed in to entries in a Nix attrset here:

lua#+name: table_str:var tbl=apps_tbl:exports code:tangle no:noweb-ref table_str:eval arroyo
local lines = {}
for _, row in ipairs(tbl) do
  table.insert(lines, string.format("%s.\"%s\".\"%s\" = \"%s\"; # %s", row[1], row[2], row[3], row[4], row[5]))
end
return table.concat(lines, "\n")
lua#+name: font_str:var tbl=font_tbl:exports code:tangle no:noweb-ref font_str:eval arroyo
local lines = {}
for _, row in ipairs(tbl) do
  table.insert(lines, string.format("programs.plasma.fonts.%s.family = \"%s\";", row[1], row[2]))
  table.insert(lines, string.format("programs.plasma.fonts.%s.pointSize = %s;", row[1], row[3]))
  table.insert(lines, string.format("programs.plasma.fonts.%s.style = \"%s\";", row[1], row[4]))
end
return table.concat(lines, "\n")

NEXT document or explain some of these apps above

NEXT calibre de-drm plugin module

NEXT steam and games