From 15ce6ea7d077b0c0d76639565304218980c0d457 Mon Sep 17 00:00:00 2001 From: ItsDrike Date: Mon, 24 Jun 2024 21:12:59 +0200 Subject: [PATCH] Add preference options --- .../file-managers/pcmanfm-qt/default.nix | 5 +- .../wms/hyprland/config/keybinds.nix | 14 +- home/programs/xdg/mime-apps.nix | 366 +++++++++--------- options/home/default.nix | 1 + options/home/preferences.nix | 34 ++ options/home/programs/default.nix | 20 +- 6 files changed, 228 insertions(+), 212 deletions(-) create mode 100644 options/home/preferences.nix diff --git a/home/programs/graphical/file-managers/pcmanfm-qt/default.nix b/home/programs/graphical/file-managers/pcmanfm-qt/default.nix index aee0d63..5aa35da 100644 --- a/home/programs/graphical/file-managers/pcmanfm-qt/default.nix +++ b/home/programs/graphical/file-managers/pcmanfm-qt/default.nix @@ -7,6 +7,7 @@ inherit (lib) mkIf; cfg = osConfig.myOptions.home-manager.programs.file-managers.pcmanfm-qt; + cfgPreferences = osConfig.myOptions.home-manager.preferences; in { config = mkIf cfg.enable { home.packages = with pkgs; [ lxqt.pcmanfm-qt ]; @@ -96,14 +97,14 @@ in { }; System = { - Archiver = cfg.archiverCmd; + Archiver = cfgPreferences.archiveManager.command; FallbackIconThemeName = "oxygen"; OnlyUserTemplates = false; SIUnit = false; SuCommand = "${pkgs.lxqt.lxqt-sudo}/bin/lxqt-sudo %s"; TemplateRunApp = false; TemplateTypeOnce = false; - Terminal = cfg.terminalCmd; + Terminal = cfgPreferences.terminalEmulator.command; }; Thumbnail = { diff --git a/home/programs/graphical/wms/hyprland/config/keybinds.nix b/home/programs/graphical/wms/hyprland/config/keybinds.nix index ce768bd..38cce4a 100644 --- a/home/programs/graphical/wms/hyprland/config/keybinds.nix +++ b/home/programs/graphical/wms/hyprland/config/keybinds.nix @@ -1,4 +1,6 @@ -{ config, ... }: { +{ config, osConfig, ... }: let + cfgPreferences = osConfig.myOptions.home-manager.preferences; +in { wayland.windowManager.hyprland = { settings = { "$MOUSE_LMB" = "mouse:272"; @@ -26,14 +28,16 @@ # # Programs # - "SUPER, Return, exec, kitty" - "SUPER, R, exec, walker" - # TODO: requires programs + "SUPER, Return, exec, ${cfgPreferences.terminalEmulator.command}" + "SUPER, R, exec, ${cfgPreferences.launcher.command}" + "SUPER, B, exec, ${cfgPreferences.browser.command}" + "SUPER, X, exec, ${cfgPreferences.fileManager.command}" + # TODO: Add qalculate # # DE/WM Control programs # - # TODO: Requires programs + # TODO: Add menuquit "SUPER_SHIFT, L, exec, wlogout -p layer-shell" "SUPER_CTRL, L, exec, loginctl lock-session" "SUPER_SHIFT, T, exec, toggle-idle" diff --git a/home/programs/xdg/mime-apps.nix b/home/programs/xdg/mime-apps.nix index fc43221..a61b17c 100644 --- a/home/programs/xdg/mime-apps.nix +++ b/home/programs/xdg/mime-apps.nix @@ -3,201 +3,195 @@ osConfig, ... }: let - cfg = osConfig.myOptions.home-manager.programs; + cfgPreferences = osConfig.myOptions.home-manager.preferences; in { xdg.mimeApps = let - # TODO: Make options for these - browser = "firefox.desktop"; - textEditor = browser; # nvim doesn't work properly with xdg-open, just use the browser - emailClient = browser; - documentViewer = browser; # TODO: consider zathura (org.pwmt.zathura.desktop.desktop) - fileManager = "pcmanfm-qt.desktop"; - archiveManager = "org.kde.ark.desktop"; - imageViewer = - if cfg.applications.qimgv.enable - then "qimgv.desktop" - else if cfg.applications.nomacs.enable - then "org.nomacs.ImageLounge.desktop" - else browser; - mediaPlayer = "mpv.desktop"; + browser = cfgPreferences.browser.desktop; + textEditor = cfgPreferences.textEditor.desktop; + emailClient = cfgPreferences.emailClient.desktop; + documentViewer = cfgPreferences.documentViewer.desktop; + fileManager = cfgPreferences.fileManager.desktop; + archiveManager = cfgPreferences.archiveManager.desktop; + imageViewer = cfgPreferences.imageViewer.desktop; + mediaPlayer = cfgPreferences.mediaPlayer.desktop; - associations = { - # Browser - "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/x-extension-xhtml" = [browser]; - "application/x-extension-xht" = [browser]; - "application/xhtml+xml" = [browser]; - "application/xhtml_xml" = [browser]; + associations = { + # Browser + "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/x-extension-xhtml" = [browser]; + "application/x-extension-xht" = [browser]; + "application/xhtml+xml" = [browser]; + "application/xhtml_xml" = [browser]; - # Image viewer - "image/*" = [imageViewer]; # wildcard associations don't work everywhere - "image/bmp" = [imageViewer]; - "image/gif" = [imageViewer]; - "image/jpeg" = [imageViewer]; - "image/jpg" = [imageViewer]; - "image/png" = [imageViewer]; - "image/tiff" = [imageViewer]; - "image/x-bmp" = [imageViewer]; - "image/x-pcx" = [imageViewer]; - "image/x-tga" = [imageViewer]; - "image/x-portable-pixmap" = [imageViewer]; - "image/x-portable-bitmap" = [imageViewer]; - "image/x-portable-greymap" = [imageViewer]; - "image/x-targa" = [imageViewer]; - "image/svg+xml" = [imageViewer]; - "image/svg_xml" = [imageViewer]; + # Image viewer + "image/*" = [imageViewer]; # wildcard associations don't work everywhere + "image/bmp" = [imageViewer]; + "image/gif" = [imageViewer]; + "image/jpeg" = [imageViewer]; + "image/jpg" = [imageViewer]; + "image/png" = [imageViewer]; + "image/tiff" = [imageViewer]; + "image/x-bmp" = [imageViewer]; + "image/x-pcx" = [imageViewer]; + "image/x-tga" = [imageViewer]; + "image/x-portable-pixmap" = [imageViewer]; + "image/x-portable-bitmap" = [imageViewer]; + "image/x-portable-greymap" = [imageViewer]; + "image/x-targa" = [imageViewer]; + "image/svg+xml" = [imageViewer]; + "image/svg_xml" = [imageViewer]; - # Media Player (video + audio) - "video/*" = [mediaPlayer]; # wildcard associations don't work everywhere - "audio/*" = [mediaPlayer]; # -||- - "video/mpeg" = [mediaPlayer]; - "video/x-mpeg2" = [mediaPlayer]; - "video/x-mpeg3" = [mediaPlayer]; - "video/mp4v-es" = [mediaPlayer]; - "video/x-m4v" = [mediaPlayer]; - "video/mp4" = [mediaPlayer]; - "video/divx" = [mediaPlayer]; - "video/vnd.divx" = [mediaPlayer]; - "video/msvideo" = [mediaPlayer]; - "video/x-msvideo" = [mediaPlayer]; - "video/ogg" = [mediaPlayer]; - "video/quicktime" = [mediaPlayer]; - "video/vnd.rn-realvideo" = [mediaPlayer]; - "video/x-avi" = [mediaPlayer]; - "video/avi" = [mediaPlayer]; - "video/x-flic" = [mediaPlayer]; - "video/fli" = [mediaPlayer]; - "video/x-flc" = [mediaPlayer]; - "video/flv" = [mediaPlayer]; - "video/x-flv" = [mediaPlayer]; - "video/x-theora" = [mediaPlayer]; - "video/x-theora+ogg" = [mediaPlayer]; - "video/x-matroska" = [mediaPlayer]; - "video/mkv" = [mediaPlayer]; - "video/webm" = [mediaPlayer]; - "video/x-ogm" = [mediaPlayer]; - "video/x-ogm+ogg" = [mediaPlayer]; - "video/dv" = [mediaPlayer]; - "video/mp2t" = [mediaPlayer]; - "video/vnd.mpegurl" = [mediaPlayer]; - "video/3gp" = [mediaPlayer]; - "video/3gpp" = [mediaPlayer]; - "video/3gpp2" = [mediaPlayer]; + # Media Player (video + audio) + "video/*" = [mediaPlayer]; # wildcard associations don't work everywhere + "audio/*" = [mediaPlayer]; # -||- + "video/mpeg" = [mediaPlayer]; + "video/x-mpeg2" = [mediaPlayer]; + "video/x-mpeg3" = [mediaPlayer]; + "video/mp4v-es" = [mediaPlayer]; + "video/x-m4v" = [mediaPlayer]; + "video/mp4" = [mediaPlayer]; + "video/divx" = [mediaPlayer]; + "video/vnd.divx" = [mediaPlayer]; + "video/msvideo" = [mediaPlayer]; + "video/x-msvideo" = [mediaPlayer]; + "video/ogg" = [mediaPlayer]; + "video/quicktime" = [mediaPlayer]; + "video/vnd.rn-realvideo" = [mediaPlayer]; + "video/x-avi" = [mediaPlayer]; + "video/avi" = [mediaPlayer]; + "video/x-flic" = [mediaPlayer]; + "video/fli" = [mediaPlayer]; + "video/x-flc" = [mediaPlayer]; + "video/flv" = [mediaPlayer]; + "video/x-flv" = [mediaPlayer]; + "video/x-theora" = [mediaPlayer]; + "video/x-theora+ogg" = [mediaPlayer]; + "video/x-matroska" = [mediaPlayer]; + "video/mkv" = [mediaPlayer]; + "video/webm" = [mediaPlayer]; + "video/x-ogm" = [mediaPlayer]; + "video/x-ogm+ogg" = [mediaPlayer]; + "video/dv" = [mediaPlayer]; + "video/mp2t" = [mediaPlayer]; + "video/vnd.mpegurl" = [mediaPlayer]; + "video/3gp" = [mediaPlayer]; + "video/3gpp" = [mediaPlayer]; + "video/3gpp2" = [mediaPlayer]; - "application/x-cue" = [mediaPlayer]; - "application/vnd.ms-asf" = [mediaPlayer]; - "application/x-matroska" = [mediaPlayer]; - "application/x-ogm" = [mediaPlayer]; - "application/x-ogm-audio" = [mediaPlayer]; - "application/x-ogm-video" = [mediaPlayer]; - "application/x-shorten" = [mediaPlayer]; - "application/x-mpegurl" = [mediaPlayer]; - "application/vnd.apple.mpegurl" = [mediaPlayer]; - "application/ogg" = [mediaPlayer]; - "application/x-ogg" = [mediaPlayer]; - "application/mxf" = [mediaPlayer]; - "application/sdp" = [mediaPlayer]; - "application/smil" = [mediaPlayer]; - "application/x-smil" = [mediaPlayer]; - "application/streamingmedia" = [mediaPlayer]; - "application/x-streamingmedia" = [mediaPlayer]; - "application/vnd.rn-realmedia" = [mediaPlayer]; - "application/vnd.rn-realmedia-vbr" = [mediaPlayer]; - "application/x-extension-m4a" = [mediaPlayer]; + "application/x-cue" = [mediaPlayer]; + "application/vnd.ms-asf" = [mediaPlayer]; + "application/x-matroska" = [mediaPlayer]; + "application/x-ogm" = [mediaPlayer]; + "application/x-ogm-audio" = [mediaPlayer]; + "application/x-ogm-video" = [mediaPlayer]; + "application/x-shorten" = [mediaPlayer]; + "application/x-mpegurl" = [mediaPlayer]; + "application/vnd.apple.mpegurl" = [mediaPlayer]; + "application/ogg" = [mediaPlayer]; + "application/x-ogg" = [mediaPlayer]; + "application/mxf" = [mediaPlayer]; + "application/sdp" = [mediaPlayer]; + "application/smil" = [mediaPlayer]; + "application/x-smil" = [mediaPlayer]; + "application/streamingmedia" = [mediaPlayer]; + "application/x-streamingmedia" = [mediaPlayer]; + "application/vnd.rn-realmedia" = [mediaPlayer]; + "application/vnd.rn-realmedia-vbr" = [mediaPlayer]; + "application/x-extension-m4a" = [mediaPlayer]; - "audio/x-matroska" = [mediaPlayer]; - "audio/webm" = [mediaPlayer]; - "audio/vorbis" = [mediaPlayer]; - "audio/x-vorbis" = [mediaPlayer]; - "audio/x-vorbis+ogg" = [mediaPlayer]; - "audio/x-shorten" = [mediaPlayer]; - "audio/x-ape" = [mediaPlayer]; - "audio/x-wavpack" = [mediaPlayer]; - "audio/x-tta" = [mediaPlayer]; - "audio/AMR" = [mediaPlayer]; - "audio/ac3" = [mediaPlayer]; - "audio/eac3" = [mediaPlayer]; - "audio/amr-wb" = [mediaPlayer]; - "audio/flac" = [mediaPlayer]; - "audio/mp4" = [mediaPlayer]; - "audio/x-pn-au" = [mediaPlayer]; - "audio/3gpp" = [mediaPlayer]; - "audio/3gpp2" = [mediaPlayer]; - "audio/dv" = [mediaPlayer]; - "audio/opus" = [mediaPlayer]; - "audio/x-ms-asf" = [mediaPlayer]; - "audio/vnd.dts" = [mediaPlayer]; - "audio/vnd.dts.hd" = [mediaPlayer]; - "audio/x-adpcm" = [mediaPlayer]; - "audio/m3u" = [mediaPlayer]; - "audio/aac" = [mediaPlayer]; - "audio/x-aac" = [mediaPlayer]; - "audio/vnd.dolby.heaac.1" = [mediaPlayer]; - "audio/vnd.dolby.heaac.2" = [mediaPlayer]; - "audio/aiff" = [mediaPlayer]; - "audio/x-aiff" = [mediaPlayer]; - "audio/m4a" = [mediaPlayer]; - "audio/x-m4a" = [mediaPlayer]; - "audio/mp1" = [mediaPlayer]; - "audio/x-mp1" = [mediaPlayer]; - "audio/mp2" = [mediaPlayer]; - "audio/x-mp2" = [mediaPlayer]; - "audio/mp3" = [mediaPlayer]; - "audio/x-mp3" = [mediaPlayer]; - "audio/mpeg" = [mediaPlayer]; - "audio/mpeg2" = [mediaPlayer]; - "audio/mpeg3" = [mediaPlayer]; - "audio/mpegurl" = [mediaPlayer]; - "audio/x-mpegurl" = [mediaPlayer]; - "audio/mpg" = [mediaPlayer]; - "audio/x-mpg" = [mediaPlayer]; - "audio/rn-mpeg" = [mediaPlayer]; - "audio/musepack" = [mediaPlayer]; - "audio/x-musepack" = [mediaPlayer]; - "audio/ogg" = [mediaPlayer]; - "audio/scpls" = [mediaPlayer]; - "audio/x-scpls" = [mediaPlayer]; - "audio/vnd.rn-realaudio" = [mediaPlayer]; - "audio/wav" = [mediaPlayer]; - "audio/x-pn-wav" = [mediaPlayer]; - "audio/x-pn-windows-pcm" = [mediaPlayer]; - "audio/x-realaudio" = [mediaPlayer]; - "audio/x-pn-realaudio" = [mediaPlayer]; - "audio/x-ms-wma" = [mediaPlayer]; - "audio/x-pls" = [mediaPlayer]; - "audio/x-wav" = [mediaPlayer]; + "audio/x-matroska" = [mediaPlayer]; + "audio/webm" = [mediaPlayer]; + "audio/vorbis" = [mediaPlayer]; + "audio/x-vorbis" = [mediaPlayer]; + "audio/x-vorbis+ogg" = [mediaPlayer]; + "audio/x-shorten" = [mediaPlayer]; + "audio/x-ape" = [mediaPlayer]; + "audio/x-wavpack" = [mediaPlayer]; + "audio/x-tta" = [mediaPlayer]; + "audio/AMR" = [mediaPlayer]; + "audio/ac3" = [mediaPlayer]; + "audio/eac3" = [mediaPlayer]; + "audio/amr-wb" = [mediaPlayer]; + "audio/flac" = [mediaPlayer]; + "audio/mp4" = [mediaPlayer]; + "audio/x-pn-au" = [mediaPlayer]; + "audio/3gpp" = [mediaPlayer]; + "audio/3gpp2" = [mediaPlayer]; + "audio/dv" = [mediaPlayer]; + "audio/opus" = [mediaPlayer]; + "audio/x-ms-asf" = [mediaPlayer]; + "audio/vnd.dts" = [mediaPlayer]; + "audio/vnd.dts.hd" = [mediaPlayer]; + "audio/x-adpcm" = [mediaPlayer]; + "audio/m3u" = [mediaPlayer]; + "audio/aac" = [mediaPlayer]; + "audio/x-aac" = [mediaPlayer]; + "audio/vnd.dolby.heaac.1" = [mediaPlayer]; + "audio/vnd.dolby.heaac.2" = [mediaPlayer]; + "audio/aiff" = [mediaPlayer]; + "audio/x-aiff" = [mediaPlayer]; + "audio/m4a" = [mediaPlayer]; + "audio/x-m4a" = [mediaPlayer]; + "audio/mp1" = [mediaPlayer]; + "audio/x-mp1" = [mediaPlayer]; + "audio/mp2" = [mediaPlayer]; + "audio/x-mp2" = [mediaPlayer]; + "audio/mp3" = [mediaPlayer]; + "audio/x-mp3" = [mediaPlayer]; + "audio/mpeg" = [mediaPlayer]; + "audio/mpeg2" = [mediaPlayer]; + "audio/mpeg3" = [mediaPlayer]; + "audio/mpegurl" = [mediaPlayer]; + "audio/x-mpegurl" = [mediaPlayer]; + "audio/mpg" = [mediaPlayer]; + "audio/x-mpg" = [mediaPlayer]; + "audio/rn-mpeg" = [mediaPlayer]; + "audio/musepack" = [mediaPlayer]; + "audio/x-musepack" = [mediaPlayer]; + "audio/ogg" = [mediaPlayer]; + "audio/scpls" = [mediaPlayer]; + "audio/x-scpls" = [mediaPlayer]; + "audio/vnd.rn-realaudio" = [mediaPlayer]; + "audio/wav" = [mediaPlayer]; + "audio/x-pn-wav" = [mediaPlayer]; + "audio/x-pn-windows-pcm" = [mediaPlayer]; + "audio/x-realaudio" = [mediaPlayer]; + "audio/x-pn-realaudio" = [mediaPlayer]; + "audio/x-ms-wma" = [mediaPlayer]; + "audio/x-pls" = [mediaPlayer]; + "audio/x-wav" = [mediaPlayer]; - # Document Viewer - "application/pdf" = [documentViewer]; - "application/epub" = [documentViewer]; - "application/djvu" = [documentViewer]; - "application/mobi" = [documentViewer]; + # Document Viewer + "application/pdf" = [documentViewer]; + "application/epub" = [documentViewer]; + "application/djvu" = [documentViewer]; + "application/mobi" = [documentViewer]; - # File & archive manager(s) - "inode/directory" = [fileManager]; - "application/zip" = [archiveManager]; - "application/x-xz-compressed-tar" = [archiveManager]; + # File & archive manager(s) + "inode/directory" = [fileManager]; + "application/zip" = [archiveManager]; + "application/x-xz-compressed-tar" = [archiveManager]; - # Plain-text - "text/plain" = [textEditor]; - "application/json" = [textEditor]; + # Plain-text + "text/plain" = [textEditor]; + "application/json" = [textEditor]; - # Application specific schemes - "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 + # Application specific schemes + "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 - # Misc - "x-scheme-handler/mailto" = [emailClient]; - }; + # Misc + "x-scheme-handler/mailto" = [emailClient]; + }; in { enable = true; associations.added = associations; @@ -205,8 +199,8 @@ in { }; home.sessionVariables = { - BROWSER = "firefox"; - DEFAULT_BROWSER = "firefox"; - TERMINAL = "kitty"; + BROWSER = cfgPreferences.browser.command; + DEFAULT_BROWSER = cfgPreferences.browser.command; + TERMINAL = cfgPreferences.terminalEmulator.command; }; } diff --git a/options/home/default.nix b/options/home/default.nix index 9ea9de9..eb6ff70 100644 --- a/options/home/default.nix +++ b/options/home/default.nix @@ -8,6 +8,7 @@ in ./wms.nix ./theme.nix ./services.nix + ./preferences.nix ]; options.myOptions.home-manager = { diff --git a/options/home/preferences.nix b/options/home/preferences.nix new file mode 100644 index 0000000..0e899cf --- /dev/null +++ b/options/home/preferences.nix @@ -0,0 +1,34 @@ +{ lib, ... }: let + inherit (lib) mkOption types; + + mkPreferenceCmdOption = name: commandDefault: mkOption { + type = types.str; + description = "The command to start your preferred ${name}."; + default = commandDefault; + }; + + mkPreferenceDesktopOption = name: desktopDefault: mkOption { + type = types.str; + description = "The desktop (application) file for your preferred ${name}."; + default = desktopDefault; + }; + + mkPreferenceOptions = name: commandDefault: desktopDefault: { + command = mkPreferenceCmdOption name commandDefault; + desktop = mkPreferenceDesktopOption name desktopDefault; + }; +in +{ + options.myOptions.home-manager.preferences = { + browser = mkPreferenceOptions "browser" "firefox" "firefox.desktop"; + terminalEmulator = mkPreferenceOptions "terminal emulator" "kitty" "kitty.desktop"; + textEditor = mkPreferenceOptions "editor" "nvim" "nvim.desktop"; + fileManager = mkPreferenceOptions "file manager" "pcmanfm-qt" "pcmanfm-qt.desktop"; + imageViewer = mkPreferenceOptions "image viewer" "qimgv" "qimgv.desktop"; + mediaPlayer = mkPreferenceOptions "media player" "mpv" "mpv.desktop"; + archiveManager = mkPreferenceOptions "archive manager" "ark" "org.kde.ark.desktop"; + documentViewer = mkPreferenceOptions "document viewer" "firefox" "firefox.desktop"; # TODO: consider zathura (org.pwmt.zathura.desktop.desktop) + emailClient = mkPreferenceOptions "email client" "firefox" "firefox.desktop"; + launcher.command = mkPreferenceCmdOption "launcher" "walker"; + }; +} diff --git a/options/home/programs/default.nix b/options/home/programs/default.nix index 7c8dc78..2933857 100644 --- a/options/home/programs/default.nix +++ b/options/home/programs/default.nix @@ -49,25 +49,7 @@ in }; file-managers = { - pcmanfm-qt = { - enable = mkEnableOption "Pcmanfm-qt (extremely fast and lightweight file manager and the standard file manager of LXDE)"; - - terminalCmd = mkOption { - type = types.str; - default = "kitty"; - description = '' - Command used to open the terminal emulator. - ''; - }; - - archiverCmd = mkOption { - type = types.str; - default = "ark"; - description = '' - Command used to open the archiver (zip/tar explorer). - ''; - }; - }; + pcmanfm-qt.enable = mkEnableOption "Pcmanfm-qt (extremely fast and lightweight file manager and the standard file manager of LXDE)"; }; tools = {