nixos-config/modules/home-manager/_private/suites/desktop.nix

230 lines
7.2 KiB
Nix
Raw Normal View History

2021-11-30 01:03:05 +00:00
# Enables all of my usual setup for desktop-oriented stuff.
{ config, lib, pkgs, ... }@attrs:
2021-11-30 01:03:05 +00:00
let
cfg = config.suites.desktop;
nixosCfg = attrs.nixosConfig;
2024-01-01 05:56:10 +00:00
in
{
options.suites.desktop = {
enable = lib.mkEnableOption "installations of desktop apps";
graphics.enable =
lib.mkEnableOption "installations of graphics-related apps";
audio = {
enable = lib.mkEnableOption "installations of audio-related apps";
pipewire.enable = lib.mkOption {
type = lib.types.bool;
default = nixosCfg.services.pipewire.enable or false;
description = ''
Enable whether to install Pipewire-related applications.
This module is implicitly enabled if used as part of the NixOS
configuration and has Pipewire service enabled.
'';
};
};
video.enable = lib.mkEnableOption "installations of video-related apps";
documents.enable =
lib.mkEnableOption "installations for document-related apps";
2021-11-30 01:03:05 +00:00
};
config = lib.mkIf cfg.enable (lib.mkMerge [
(lib.mkIf cfg.graphics.enable {
home.packages = with pkgs; [
aseprite # Pixel art wannabe tool.
2022-08-13 00:31:09 +00:00
emulsion-palette # Manage your color palettes.
eyedropper # Gotta keep your monitor moist.
inkscape-with-extensions # Illustration wannabe tool.
gimp-with-plugins # Photo editing wannabe tool.
2021-11-30 01:03:05 +00:00
krita # Digital art wannabe tool.
2021-12-06 07:27:51 +00:00
ffmpeg-full # Ah yes, everyman's multimedia swiss army knife.
2021-12-06 07:27:51 +00:00
imagemagick # Ah yes, everyman's image manipulation tool.
gmic # Don't let the gimmicks fool you, it's a magical image framework.
]
2024-01-01 05:56:10 +00:00
++ (
let
hasBlenderNixOSModule = nixosCfg.programs.blender.enable or false;
2024-01-01 05:56:10 +00:00
in
lib.optional (!hasBlenderNixOSModule) pkgs.blender
);
2021-11-30 01:03:05 +00:00
})
(lib.mkIf cfg.audio.enable {
home.packages = with pkgs; [
audacity # EGADS!!!
musescore # You won't find muses to score, only music: a common misconception.
zrythm # The freer FL Studio (if you're sailing by the high seven seas).
supercollider # Not to be confused with the other Super Collider.
sonic-pi # The only pie you'll get from this is worms which I heard is addicting.
2021-11-30 01:03:05 +00:00
ffmpeg-full # Ah yes, everyman's multimedia swiss army knife.
]
2024-01-01 05:56:10 +00:00
++ (
let
hasDesktopSuiteEnabled = nixosCfg.suites.desktop.enable or false;
2024-01-01 05:56:10 +00:00
in
lib.optionals hasDesktopSuiteEnabled (with pkgs; [
yabridge # Building bridges to Windows and Linux audio tools.
yabridgectl # The bridge controller.
2024-01-01 05:56:10 +00:00
])
);
})
2021-11-30 01:03:05 +00:00
(lib.mkIf cfg.audio.pipewire.enable {
2022-02-02 04:25:03 +00:00
# This is assuming you're using Pipewire, yes?
2021-11-30 01:03:05 +00:00
services.easyeffects.enable = true;
2021-12-08 04:18:37 +00:00
services.fluidsynth = {
enable = true;
2024-01-01 05:56:10 +00:00
soundService =
let
hasNixOSPipewirePulseEnabled = attrs.nixosConfig.services.pipewire.enable or false;
2024-01-01 05:56:10 +00:00
in
lib.mkIf hasNixOSPipewirePulseEnabled "pipewire-pulse";
2021-12-08 04:18:37 +00:00
};
home.packages = with pkgs; [
helvum # The Pipewire Patchbay.
carla # The Carla Carla.
];
2021-11-30 01:03:05 +00:00
})
2021-12-13 07:20:34 +00:00
(lib.mkIf cfg.video.enable {
2021-12-13 07:20:34 +00:00
home.packages = with pkgs; [
ffmpeg-full # Ah yes, everyman's multimedia swiss army knife.
kdenlive # YOU! Edit this video and live in a den, 'k?
2024-01-01 05:56:10 +00:00
gnome-video-effects # A bunch of stock video effects.
2021-12-13 07:20:34 +00:00
];
2022-10-13 01:05:35 +00:00
# The one-stop shop for your broadcasting and recording needs. Not to be
# confused with the build service.
programs.obs-studio = {
enable = true;
plugins = with pkgs.obs-studio-plugins; [
droidcam-obs
obs-multi-rtmp
obs-gstreamer
obs-pipewire-audio-capture
obs-source-switcher
obs-vkcapture
wlrobs
];
};
2022-10-18 11:52:18 +00:00
# The modern VLC if you have little sense of design.
programs.mpv = {
enable = true;
config = {
ytdl-format = "(webm,mkv,mp4)[height<=?1280]";
2023-10-09 12:48:01 +00:00
ytdl-raw-options-append =
let
options = {
yes-playlist = "";
};
options' = lib.mapAttrsToList (n: v: "${n}=${v}") options;
in
lib.concatStringsSep "," options';
2022-10-18 11:52:18 +00:00
ordered-chapters = true;
ab-loop-count = "inf";
chapter-seek-threshold = 15.0;
osc = false;
sub-auto = "fuzzy";
2023-10-09 12:48:01 +00:00
hwdec = "auto";
2022-10-18 11:52:18 +00:00
};
bindings = {
2023-11-08 12:47:21 +00:00
"Ctrl+s" = "playlist-shuffle";
"Alt+h" = "seek -5";
"Alt+l" = "seek 5";
"Alt+H" = "add chapter -1";
"Alt+L" = "add chapter 1";
"S" = "screenshot each-frame";
"!" = "show-text \${playlist}";
"@" = "show-text \${track-list}";
"SHARP" = "show-text \${chapter-list}";
# Ehhh, they're more getting in the way than just existing...
"f" = "ignore";
"T" = "ignore";
"Alt+s" = "ignore";
};
2022-10-18 11:52:18 +00:00
profiles = {
cjk = rec {
2022-11-26 06:13:59 +00:00
profile-desc = "CJK prioritization";
2022-10-18 11:52:18 +00:00
vlang = "zho,zh,kor,ko,jpn,ja,eng,en";
alang = vlang;
slang = with lib; concatStringsSep "," (reverseList (splitString "," vlang));
};
"extension.gif" = {
osc = false;
2023-10-20 07:33:46 +00:00
loop-file = "inf";
};
2022-10-18 11:52:18 +00:00
};
scripts = with pkgs.mpvScripts; [
mpris
mpvacious
mpv-playlistmanager
2022-10-18 11:52:18 +00:00
thumbnail
quality-menu
2022-10-18 11:52:18 +00:00
];
};
xdg.mimeApps.defaultApplications = {
"audio/*" = [ "mpv.desktop" ];
"video/*" = [ "mpv.desktop" ];
};
})
(lib.mkIf cfg.documents.enable {
home.packages = with pkgs; [
2023-10-29 07:25:18 +00:00
dino # Some modern chat client featuring a dinosaur mascot for what could be considered a dinosaur.
foliate # The prettier PDF viewer (if you're OK with a mixed bag of GTK3+GTK4 apps).
thunderbird # Email and web feed checks.
languagetool # You're personal assistant for proper grammar,
2023-12-18 10:44:27 +00:00
vale # Elevate your fanfics to a frivolously higher caliber!
];
2022-10-18 11:52:18 +00:00
xdg.mimeApps.defaultApplications = {
"application/pdf" = [
"sioyek.desktop"
"com.github.johnfactotum.Foliate.desktop"
];
};
# Some PDF viewer with a penchant for research.
2022-10-13 01:05:35 +00:00
programs.sioyek = {
enable = true;
# All of my keybindings based from my Neovim workflow.
bindings = {
"move_up" = [ "k" "<up>" ];
"move_down" = [ "j" "<down>" ];
"move_left" = [ "h" "<left>" ];
"move_right" = [ "l" "<right>" ];
"next_page" = [ "<C-f>" "<S-<down>>" ];
"previous_page" = [ "<C-b>" "<S-<up>>" ];
"screen_down" = [ "<C-d>" "d" ];
"screen_up" = [ "<C-u>" "u" ];
"fit_to_page_width_smart" = "<C-S-f>";
"copy" = "y";
"goto_toc" = [ "t" "g<S-o>" ];
"open_prev_doc" = [ "<S-o>" "fbb" ];
"open_last_document" = [ "^" "<C-S-6>" ];
};
config = {
"search_url_b" = "https://search.brave.com/search?q=";
"shift_middle_click_engine" = "b";
"ui_font" = "sans-serif";
"font_size" = "24";
};
};
2021-12-13 07:20:34 +00:00
})
2021-11-30 01:03:05 +00:00
]);
}