diff --git a/home/default.nix b/home/default.nix index fc15a74..90c64a0 100644 --- a/home/default.nix +++ b/home/default.nix @@ -34,6 +34,7 @@ in ./programs ./impermanence ./themes + ./services ]; config = { diff --git a/home/packages/cli/desktop.nix b/home/packages/cli/desktop.nix index 4d0b918..731345d 100644 --- a/home/packages/cli/desktop.nix +++ b/home/packages/cli/desktop.nix @@ -11,8 +11,16 @@ in { config = mkIf (builtins.elem devType acceptedTypes) { home.packages = with pkgs; [ - trash-cli - bitwarden-cli + libnotify # send desktop notifications + imagemagick # create/edit images + trash-cli # interface to freedesktop trashcan + bitwarden-cli # pw manager + slides # terminal based presentation tool + brightnessctl # brightness control + pulsemixer # manage audio (TUI) + nix-tree # interactively browse nix store + glow # render markdown + ffmpeg # record, convert and stream audio and video ]; }; } diff --git a/home/packages/cli/shared.nix b/home/packages/cli/shared.nix index 51a2b73..631ffcf 100644 --- a/home/packages/cli/shared.nix +++ b/home/packages/cli/shared.nix @@ -21,12 +21,15 @@ dnsutils # DNS utilities dig # DNS utilities curl # CLI tool for transfering data with URLs + lm_sensors # tools for reading hw sensors + p7zip # 7zip fork with some improvements # Rust replacements procs # better ps ripgrep # better grep fd # better find du-dust # better du + skim # fuzzy finder # Development gcc # GNU C compiler diff --git a/home/packages/gui/default.nix b/home/packages/gui/default.nix index cbc8417..5aa96be 100644 --- a/home/packages/gui/default.nix +++ b/home/packages/gui/default.nix @@ -4,5 +4,7 @@ _: { ./stremio.nix ./nomacs.nix ./qbittorrent.nix + ./mpv.nix + ./obs.nix ]; } diff --git a/home/packages/gui/mpv.nix b/home/packages/gui/mpv.nix new file mode 100644 index 0000000..812aee1 --- /dev/null +++ b/home/packages/gui/mpv.nix @@ -0,0 +1,17 @@ +{ + lib, + pkgs, + osConfig, + ... +}: let + inherit (lib) mkIf; + + cfg = osConfig.myOptions.home-manager.programs.applications.mpv; +in { + config = mkIf cfg.enable { + home.packages = with pkgs; [ + mpv + ]; + }; +} + diff --git a/home/packages/gui/obs.nix b/home/packages/gui/obs.nix new file mode 100644 index 0000000..8d4428b --- /dev/null +++ b/home/packages/gui/obs.nix @@ -0,0 +1,19 @@ +{ + lib, + pkgs, + osConfig, + ... +}: let + inherit (lib) mkIf; + + cfg = osConfig.myOptions.home-manager.programs.applications.obs; +in { + config = mkIf cfg.enable { + home.packages = with pkgs; [ + obs-studio + obs-cli + ]; + }; +} + + diff --git a/home/programs/xdg/mime-apps.nix b/home/programs/xdg/mime-apps.nix index 6b65520..2587809 100644 --- a/home/programs/xdg/mime-apps.nix +++ b/home/programs/xdg/mime-apps.nix @@ -1,43 +1,60 @@ # Manage $XDG_CONFIG_HOME/mimeapps.list { - xdg.mimeApps = { - enable = true; - associations.added = let + xdg.mimeApps = let browser = "firefox.desktop"; textEditor = browser; # nvim doesn't work properly with xdg-open, just use the browser - fileManager = "pcmanfm-qt.desktop"; - archiveManager = "org.gnome.FileRoller.desktop"; + emailClient = browser; + pdfViewer = browser; # TODO: consider zathura (org.pwmt.zathura.desktop.desktop) + fileManager = "pcmanfm-qt.desktop"; # TODO: change + archiveManager = "org.kde.ark.desktop"; imageViewer = "org.nomacs.ImageLounge.desktop"; videoPlayer = "mpv.desktop"; audioPlayer = "mpv.desktop"; - in { - "text/html" = [browser]; - "x-scheme-handler/http" = [browser]; - "x-scheme-handler/https" = [browser]; - "x-scheme-handler/about" = [browser]; - "x-scheme-handler/unknown" = [browser]; - "application/x-extension-htm" = [browser]; - "application/x-extension-html" = [browser]; - "application/x-extension-shtml" = [browser]; - "application/xhtml+xml" = [browser]; - "application/x-extension-xhtml" = [browser]; - "application/x-extension-xht" = [browser]; - "inode/directory" = [fileManager]; - "application/zip" = [archiveManager]; - "application/x-xz-compressed-tar" = [archiveManager]; + associations = { + "text/html" = [browser]; + "x-scheme-handler/http" = [browser]; + "x-scheme-handler/https" = [browser]; + "x-scheme-handler/about" = [browser]; + "x-scheme-handler/unknown" = [browser]; + "application/x-extension-htm" = [browser]; + "application/x-extension-html" = [browser]; + "application/x-extension-shtml" = [browser]; + "application/xhtml+xml" = [browser]; + "application/x-extension-xhtml" = [browser]; + "application/x-extension-xht" = [browser]; - "image/*" = [imageViewer]; - "audio/*" = [audioPlayer]; - "video/*" = [videoPlayer]; + "application/pdf" = [pdfViewer]; + "x-scheme-handler/mailto" = [emailClient]; - "text/plain" = [textEditor]; - "application/json" = [textEditor]; + "inode/directory" = [fileManager]; + "application/zip" = [archiveManager]; + "application/x-xz-compressed-tar" = [archiveManager]; - "x-scheme-handler/spotify" = ["spotify.desktop"]; - "x-scheme-handler/tg" = ["telegramdesktop.desktop"]; - "x-scheme-handler/msteams" = ["teams.desktop"]; # I need it for school, don't judge me - }; + "image/*" = [imageViewer]; + "audio/*" = [audioPlayer]; + "video/*" = [videoPlayer]; + + # The wildcard associations don't work everywhere, so we + # still need specific ones + "image/jpeg" = [imageViewer]; + "image/png" = [imageViewer]; + "image/svg+xml" = [imageViewer]; + "image/gif" = [imageViewer]; + "video/mp4" = [videoPlayer]; + + "text/plain" = [textEditor]; + "application/json" = [textEditor]; + + "x-scheme-handler/spotify" = ["spotify.desktop"]; + "x-scheme-handler/tg" = ["telegramdesktop.desktop"]; + "x-scheme-handler/discord" = ["vesktop.desktop"]; + "x-scheme-handler/msteams" = ["teams.desktop"]; # I need it for school, don't judge me + }; + in { + enable = true; + associations.added = associations; + defaultApplications = associations; }; home.sessionVariables = { diff --git a/home/services/default.nix b/home/services/default.nix index 63b0638..9799edc 100644 --- a/home/services/default.nix +++ b/home/services/default.nix @@ -1,3 +1,5 @@ _: { - imports = [ ]; + imports = [ + ./dunst.nix + ]; } diff --git a/home/services/dunst.nix b/home/services/dunst.nix new file mode 100644 index 0000000..5293437 --- /dev/null +++ b/home/services/dunst.nix @@ -0,0 +1,100 @@ +{ + lib, + osConfig, + config, + ... +}: let + inherit (lib) mkIf; + + cfg = osConfig.myOptions.home-manager.services.dunst; +in { + config = mkIf cfg.enable { + services.dunst = { + enable = true; + iconTheme = { + package = config.gtk.iconTheme.package; + name = config.gtk.iconTheme.name; + }; + + settings = { + global = { + follow = "mouse"; + width = 270; + height = 300; + origin = "top-right"; + offset = "30x30"; + scale = 0; + alignment = "left"; + vertical_alignment = "center"; + ellipsize = "middle"; + padding = 10; + horizontal_padding = 10; + text_icon_padding = 0; + icon_position = "left"; + min_icon_size = 0; + max_icon_size = 32; + separator_height = 2; + frame_width = 3; + frame_color = "#27292c"; + separator_color = "frame"; + corner_radius = 0; + transparency = 20; + word_wrap = "yes"; + line_height = 0; + notification_limit = 3; + idle_threshold = 120; + history_length = 20; + show_age_threshold = 60; + markup = "full"; + format = "%a - %s\\n%b"; + font = "JetBrainsMono Nerd Font 11"; + sort = "yes"; + shrink = "no"; + sticky_history = "yes"; + ignore_newline = "no"; + show_indicators = "yes"; + stack_duplicates = true; + always_run_script = true; + hide_duplicate_count = false; + ignore_dbusclose = false; + force_xwayland = false; + force_xinerama = false; + mouse_left_click = "do_action, open_url, close_current"; + mouse_middle_click = "context"; + mouse_right_click = "close_current"; + indicate_hidden = "yes"; + progress_bar = true; + progress_bar_height = 30; + progress_bar_frame_width = 1; + progress_bar_min_width = 150; + progress_bar_max_width = 300; + title = "Dunst"; + class = "Dunst"; + }; + + fullscreen_delay_everything = {fullscreen = "delay";}; + + urgency_low = { + timeout = 5; + background = "#1e2137fa"; + foreground = "#ffffff"; + highlight = "#fe6c5a"; + }; + + urgency_normal = { + timeout = 10; + background = "#141c21fa"; + foreground = "#ffffffff"; + highlight = "#fe6c5a"; + }; + + urgency_critical = { + timeout = 0; + background = "#dd130ddd"; + foreground = "#ffffffff"; + highlight = "#fe6c5a"; + }; + }; + }; + }; +} diff --git a/hosts/voyager/default.nix b/hosts/voyager/default.nix index 29a6a30..97daeff 100644 --- a/hosts/voyager/default.nix +++ b/hosts/voyager/default.nix @@ -70,6 +70,7 @@ # Applications ".config/spotify" ".config/vesktop" + "./config/nomacs" ".local/share/Smart Code ltd/Stremio" # Tools @@ -173,10 +174,16 @@ enable = true; autoStart = true; }; + mpv.enable = true; nomacs.enable = true; qbittorrent.enable = true; + obs.enable = true; }; }; + + services = { + dunst.enable = true; + }; }; }; } diff --git a/options/home/default.nix b/options/home/default.nix index 8e7f5a8..9ea9de9 100644 --- a/options/home/default.nix +++ b/options/home/default.nix @@ -7,6 +7,7 @@ in ./git.nix ./wms.nix ./theme.nix + ./services.nix ]; options.myOptions.home-manager = { diff --git a/options/home/programs/default.nix b/options/home/programs/default.nix index f602885..b397554 100644 --- a/options/home/programs/default.nix +++ b/options/home/programs/default.nix @@ -35,6 +35,8 @@ in }; nomacs.enable = mkEnableOption "Nomacs (Qt-based image viewer)"; qbittorrent.enable = mkEnableOption "Qbittorrent (Free software BitTorrent client)"; + obs.enable = mkEnableOption "OBS (Free and oepn source software for video recording and live streaming)"; + mpv.enable = mkEnableOption "MPV (General-purpose media player)"; }; tools = { diff --git a/options/home/services.nix b/options/home/services.nix new file mode 100644 index 0000000..7586b0a --- /dev/null +++ b/options/home/services.nix @@ -0,0 +1,9 @@ +{ lib, ... }: with lib; let + inherit (lib) mkEnableOption mkOption types; +in +{ + options.myOptions.home-manager.services = { + dunst.enable = mkEnableOption "Dunst (lightweight notification daemon)"; + }; +} +