The Complete Computer

Applications I Use

LifeTechEmacsArcology

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 source: :tangle ~/arroyo-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 # trying ... logseq ]; }

Media

nix source: :tangle ~/arroyo-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 ]; }; }

Communications

nix source: :tangle ~/arroyo-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 source: :tangle ~/arroyo-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 source: :tangle ~/arroyo-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 source: :tangle ~/arroyo-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 source: :tangle ~/arroyo-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 source: :tangle ~/arroyo-nix/hm/applications.nix :noweb yes
{ config, pkgs, ... }: with pkgs; let mkNixGLWrapper = pkgs.lib.mkNixGLWrapper; unstable = import (builtins.getFlake "github:nixos/nixpkgs/nixpkgs-unstable") {}; 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 source: :tangle ~/arroyo-nix/nixos/applications.nix
{ config, pkgs, ... }: { networking.firewall.allowedTCPPorts = [ 8080 ]; services.avahi.enable = true; programs.adb.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 ]) ++ (with pkgs; [ jq zip unzip pv tree ]); 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 ''; }

Default KDE Application Configuration via Plasma Manager

nix source: :tangle ~/arroyo-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

filegroupkeyvaluenote
dolphinrcGeneralFilterBartrueCtrl-i bound here by default
dolphinrcGeneralBrowseThroughArchivestrueBrowse in to zip, etc; I use "Extract To" context menu option instead of ark
dolphinrcGeneralConfirmClosingMultipleTabsfalseAlways fresh Dolphin
dolphinrcGeneralRememberOpenedTabsfalseAlways fresh Dolphin
kteatimeTealistTea0 Name30s
kteatimeTealistTea0 Time30
kteatimeTealistTea1 Name45s
kteatimeTealistTea1 Time45
kteatimeTealistTea2 Name60s
kteatimeTealistTea2 Time60
kteatimeTealistTea3 Name90s
kteatimeTealistTea3 Time90
kteatimeGeneralPopupAutoHidefalse
kteatimeGeneralPopupAutoHideTime30
kteatimeGeneralUsePopuptrue
kteatimeGeneralUseReminderfalse
kteatimeGeneralUseVisualizetrue
baloofilercBasic SettingsIndexing-Enabledfalse

KDE Font configuration

typefamilypointSizestyle
generalVulf Sans10normal
fixedWidthVulf Mono10italic
menuVulf Sans10normal
smallVulf Sans8normal
toolbarVulf Sans8normal
windowTitleVulf Sans8normal

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:

emacs-lisp source: :var tbl=apps_tbl :exports code :tangle no :noweb-ref table_str
(thread-last tbl (mapcar (lambda (it) (apply #'format "%s.\"%s\".\"%s\" = \"%s\"; # %s" it))) (s-join "\n"))
emacs-lisp source: :var tbl=font_tbl :exports code :tangle no :noweb-ref font_str
(thread-last tbl (mapcar (pcase-lambda (`(,type ,family ,pointSize ,style)) (s-join "\n" (list (format "programs.plasma.fonts.%s.%s = \"%s\";" type "family" family) (format "programs.plasma.fonts.%s.%s = %s;" type "pointSize" pointSize) (format "programs.plasma.fonts.%s.%s = \"%s\";" type "style" style))))) (s-join "\n"))

NEXT document or explain some of these apps above

NEXT calibre de-drm plugin module

NEXT steam and games