diff --git a/nixcfgs/hosts/zephyrus/default.nix b/nixcfgs/hosts/zephyrus/default.nix index 177a763..835470d 100644 --- a/nixcfgs/hosts/zephyrus/default.nix +++ b/nixcfgs/hosts/zephyrus/default.nix @@ -26,7 +26,7 @@ # desktop environment and display manager ../../modules/nixos/desktop/dm/tuigreet.nix ../../modules/nixos/desktop/de/niri.nix - ../../modules/nixos/desktop/de/hyprland.nix + ../../modules/nixos/desktop/de/kde.nix # desktop programs ../../modules/nixos/programs/zsh.nix diff --git a/nixcfgs/modules/nixos/desktop/de/kde.nix b/nixcfgs/modules/nixos/desktop/de/kde.nix index 614bcc9..6454437 100644 --- a/nixcfgs/modules/nixos/desktop/de/kde.nix +++ b/nixcfgs/modules/nixos/desktop/de/kde.nix @@ -10,4 +10,8 @@ serviceMode = "user"; userName = "js0ny"; }; + + environment.plasma6.excludePackages = with pkgs.kdePackages; [ + kate # kate and kwrite + ]; } diff --git a/nixcfgs/users/js0ny/packages/gui.nix b/nixcfgs/users/js0ny/packages/gui.nix index d556ba7..41ae714 100644 --- a/nixcfgs/users/js0ny/packages/gui.nix +++ b/nixcfgs/users/js0ny/packages/gui.nix @@ -125,7 +125,8 @@ in { prismlauncher obsidian file-roller - siyuan + steamtinkerlaunch + scanmem ] ++ (mkFcitxIM [ pkgs.neovim-qt diff --git a/nixcfgs/users/js0ny/programs/desktop/plasma/default.nix b/nixcfgs/users/js0ny/programs/desktop/plasma/default.nix index 4274a27..03fa30d 100644 --- a/nixcfgs/users/js0ny/programs/desktop/plasma/default.nix +++ b/nixcfgs/users/js0ny/programs/desktop/plasma/default.nix @@ -28,10 +28,10 @@ krunner = { position = "center"; }; - workspace = { - iconTheme = "${config.my.desktop.style.iconTheme.dark}"; - colorScheme = "BreezeDark"; - }; + # workspace = { + # iconTheme = "${config.my.desktop.style.iconTheme.dark}"; + # colorScheme = "BreezeDark"; + # }; kwin = { virtualDesktops.number = 8; titlebarButtons = { @@ -139,18 +139,4 @@ }; inputMode = "vi"; }; - programs.konsole = { - enable = true; - defaultProfile = "Default"; - profiles = { - Default = { - command = "${pkgs.fish}/bin/fish"; - colorScheme = "catppuccin-mocha"; - font = { - name = "Maple Mono NF CN"; - size = 12; - }; - }; - }; - }; } diff --git a/nixcfgs/users/js0ny/programs/desktop/wayland-wm/dunst.nix b/nixcfgs/users/js0ny/programs/desktop/wayland-wm/dunst.nix new file mode 100644 index 0000000..9859940 --- /dev/null +++ b/nixcfgs/users/js0ny/programs/desktop/wayland-wm/dunst.nix @@ -0,0 +1,12 @@ +{lib, ...}: { + services.dunst.enable = true; + systemd.user.services.dunst = { + Install.WantedBy = lib.mkForce ["niri.service"]; + Service = { + # Disable on KDE + ExecCondition = lib.mkForce '' + /bin/sh -c '[ "$XDG_CURRENT_DESKTOP" != "KDE" ] && [ "$XDG_CURRENT_DESKTOP" != "Plasma" ]' + ''; + }; + }; +} diff --git a/nixcfgs/users/js0ny/programs/desktop/wayland-wm/hyprland/default.nix b/nixcfgs/users/js0ny/programs/desktop/wayland-wm/hyprland/default.nix index ca051b6..bd4db89 100644 --- a/nixcfgs/users/js0ny/programs/desktop/wayland-wm/hyprland/default.nix +++ b/nixcfgs/users/js0ny/programs/desktop/wayland-wm/hyprland/default.nix @@ -21,11 +21,7 @@ ecosystem = { no_update_news = true; }; - # exec-once = [ - # "waybar" - # "dunst" - # "${pkgs.hyprpolkitagent}/libexec/hyprpolkitagent" - # ]; + exec-once = ["systemctl --user start waylandwm-session.target"]; general = { gaps_in = 2; gaps_out = 2; diff --git a/nixcfgs/users/js0ny/programs/desktop/wayland-wm/kanshi.nix b/nixcfgs/users/js0ny/programs/desktop/wayland-wm/kanshi.nix index 3bb4f9a..b56b166 100644 --- a/nixcfgs/users/js0ny/programs/desktop/wayland-wm/kanshi.nix +++ b/nixcfgs/users/js0ny/programs/desktop/wayland-wm/kanshi.nix @@ -4,6 +4,7 @@ in { services.kanshi = { enable = true; + systemdTarget = "niri.service"; settings = [ # Outputs { diff --git a/nixcfgs/users/js0ny/programs/desktop/wayland-wm/niri/default.nix b/nixcfgs/users/js0ny/programs/desktop/wayland-wm/niri/default.nix index 1040a62..4327937 100644 --- a/nixcfgs/users/js0ny/programs/desktop/wayland-wm/niri/default.nix +++ b/nixcfgs/users/js0ny/programs/desktop/wayland-wm/niri/default.nix @@ -22,10 +22,7 @@ }; spawn-at-startup = [ - {argv = ["fcitx5"];} - {argv = ["swww-daemon"];} - # polkit/portal helpers - # {argv = ["${pkgs.hyprpolkitagent}/libexec/hyprpolkitagent"];} + {argv = ["systemctl" " --user" "start" "waylandwm-session.target"];} ]; input = { diff --git a/nixcfgs/users/js0ny/programs/desktop/wayland-wm/packages.nix b/nixcfgs/users/js0ny/programs/desktop/wayland-wm/packages.nix index 9971846..e5c3b0d 100644 --- a/nixcfgs/users/js0ny/programs/desktop/wayland-wm/packages.nix +++ b/nixcfgs/users/js0ny/programs/desktop/wayland-wm/packages.nix @@ -1,4 +1,8 @@ -{pkgs, ...}: let +{ + pkgs, + lib, + ... +}: let # swayidleWrapper = pkgs.writeShellScriptBin "swayidle-wrapper" '' # ${pkgs.swayidle}/bin/swayidle -w \ # timeout 300 'swaylock -f' \ @@ -42,6 +46,8 @@ in { ./hyprlock.nix ./swayidle.nix ./sunsetr.nix + ./systemd.nix + ./dunst.nix ]; home.packages = with pkgs; [ swayidle # Screensaver @@ -50,14 +56,15 @@ in { brightnessctl playerctl powerprofiles-next - blueman ]; xdg.portal = { enable = true; extraPortals = with pkgs; [xdg-desktop-portal-wlr xdg-desktop-portal-gtk]; }; - services.cliphist.enable = true; - services.dunst.enable = true; + # TODO: Allow launching components from all wayland-wm sessions + # services.cliphist.enable = true; # use elephant + walker services.network-manager-applet.enable = true; - catppuccin.dunst.enable = false; + services.blueman-applet.enable = true; + services.blueman-applet.systemdTargets = ["niri.service"]; + systemd.user.services.network-manager-applet.Install.WantedBy = lib.mkForce ["niri.service"]; } diff --git a/nixcfgs/users/js0ny/programs/desktop/wayland-wm/polkit.nix b/nixcfgs/users/js0ny/programs/desktop/wayland-wm/polkit.nix index 05a0cb6..437777d 100644 --- a/nixcfgs/users/js0ny/programs/desktop/wayland-wm/polkit.nix +++ b/nixcfgs/users/js0ny/programs/desktop/wayland-wm/polkit.nix @@ -2,7 +2,7 @@ systemd.user.services.hyprpolkitagent = { Unit = { Description = "Hyprland Polkit Authentication Agent"; - PartOf = ["graphical-session.target"]; + PartOf = ["waylandwm-session.target"]; After = ["graphical-session.target"]; }; @@ -15,7 +15,7 @@ }; Install = { - WantedBy = ["graphical-session.target"]; + WantedBy = ["waylandwm-session.target"]; }; }; } diff --git a/nixcfgs/users/js0ny/programs/desktop/wayland-wm/sunsetr.nix b/nixcfgs/users/js0ny/programs/desktop/wayland-wm/sunsetr.nix index a12125a..f7aa318 100644 --- a/nixcfgs/users/js0ny/programs/desktop/wayland-wm/sunsetr.nix +++ b/nixcfgs/users/js0ny/programs/desktop/wayland-wm/sunsetr.nix @@ -1,8 +1,11 @@ {pkgs, ...}: { + # Expose CLI tool + home.packages = [pkgs.sunsetr]; + systemd.user.services.sunsetr = { Unit = { Description = "Sunsetr blue-light filtering"; - PartOf = ["graphical-session.target"]; + PartOf = ["waylandwm-session.target"]; After = ["graphical-session.target"]; }; @@ -15,7 +18,7 @@ }; Install = { - WantedBy = ["graphical-session.target"]; + WantedBy = ["niri.service"]; }; }; diff --git a/nixcfgs/users/js0ny/programs/desktop/wayland-wm/swayidle.nix b/nixcfgs/users/js0ny/programs/desktop/wayland-wm/swayidle.nix index b72e80a..fc643b4 100644 --- a/nixcfgs/users/js0ny/programs/desktop/wayland-wm/swayidle.nix +++ b/nixcfgs/users/js0ny/programs/desktop/wayland-wm/swayidle.nix @@ -1,6 +1,7 @@ {pkgs, ...}: { services.swayidle = { enable = true; + systemdTarget = "waylandwm-session.target"; timeouts = [ { timeout = 300; diff --git a/nixcfgs/users/js0ny/programs/desktop/wayland-wm/systemd.nix b/nixcfgs/users/js0ny/programs/desktop/wayland-wm/systemd.nix new file mode 100644 index 0000000..784670a --- /dev/null +++ b/nixcfgs/users/js0ny/programs/desktop/wayland-wm/systemd.nix @@ -0,0 +1,13 @@ +{lib, ...}: { + systemd.user.targets.waylandwm-session = { + Unit = { + Description = "Window Manager session, used to run services tied to the WM lifecycle"; + Documentation = ["man:systemd.special(7)"]; + + BindsTo = ["niri.service"]; + After = ["niri.service"]; + + PartOf = ["graphical-session.target"]; + }; + }; +} diff --git a/nixcfgs/users/js0ny/programs/desktop/wayland-wm/waybar/default.nix b/nixcfgs/users/js0ny/programs/desktop/wayland-wm/waybar/default.nix index 0e9ea66..7163c6d 100644 --- a/nixcfgs/users/js0ny/programs/desktop/wayland-wm/waybar/default.nix +++ b/nixcfgs/users/js0ny/programs/desktop/wayland-wm/waybar/default.nix @@ -9,7 +9,7 @@ enable = true; systemd = { enable = true; - target = "graphical-session.target"; + target = "niri.service"; }; style = '' * { diff --git a/nixcfgs/users/js0ny/programs/dolphin.nix b/nixcfgs/users/js0ny/programs/dolphin.nix index a107956..f33f42d 100644 --- a/nixcfgs/users/js0ny/programs/dolphin.nix +++ b/nixcfgs/users/js0ny/programs/dolphin.nix @@ -18,6 +18,8 @@ }; }; + imports = [./konsole.nix]; + # Manually merge dolphin config to existing file home.activation.mergeDolphinrc = lib.hm.dag.entryAfter ["writeBoundary"] '' if [ -f ~/.config/dolphinrc-override ]; then diff --git a/nixcfgs/users/js0ny/programs/konsole.nix b/nixcfgs/users/js0ny/programs/konsole.nix new file mode 100644 index 0000000..4100508 --- /dev/null +++ b/nixcfgs/users/js0ny/programs/konsole.nix @@ -0,0 +1,22 @@ +{ + config, + lib, + ... +}: { + # Dependency: plasma-manager + # Required by dolphin's terminal integration + programs.konsole = { + enable = true; + defaultProfile = "Default"; + profiles = { + Default = { + command = lib.getExe config.my.desktop.preferredApps.interactiveShell; + colorScheme = "catppuccin-mocha"; + font = { + name = "Maple Mono NF CN"; + size = 12; + }; + }; + }; + }; +} diff --git a/nixcfgs/users/js0ny/programs/mime.nix b/nixcfgs/users/js0ny/programs/mime.nix index d8ed804..5931d11 100644 --- a/nixcfgs/users/js0ny/programs/mime.nix +++ b/nixcfgs/users/js0ny/programs/mime.nix @@ -3,14 +3,20 @@ # * when `rga-fzf`: nvim wrapper failed to launch # * nvim wrapper reports error on parsing filename with spaces gvim = "neovide.desktop"; - simpleText = [ - "text/plain" - "text/x-csrc" # .c - "text/x-chdr" # .h - "text/javascript" - "text/x-python" - "application/yaml" # .yaml, .yml - ]; + simpleText = + [ + "text/plain" + "text/x-csrc" # .c + "text/x-chdr" # .h + "text/javascript" + "text/x-python" + "application/yaml" # .yaml, .yml + "text/x-patch" # .patch .diff + ] + ++ [ + "text/csv" + "text/markdown" + ]; image = [ "image/jpeg" "image/jpg" @@ -44,62 +50,40 @@ audioPlayers = "mpv.desktop;org.kde.elisa"; browsers = "firefox.desktop;chromium-browser.desktop"; archiveManager = "org.gnome.FileRoller.desktop;org.kde.ark.desktop;peazip.desktop"; + mkAssoc = app: mimes: + builtins.listToAttrs (map (mime: { + name = mime; + value = app; + }) + mimes); in { xdg.configFile."mimeapps.list".force = true; xdg.mime.enable = true; xdg.mimeApps = { enable = true; # In Dolphin, middle click to open with 2nd order default app - defaultApplications = { - # PDF - "application/pdf" = "org.kde.okular.desktop"; - # Plain text - "text/plain" = gvim; - # Source Code - C - "text/x-csrc" = gvim; # .c - "text/x-chdr" = gvim; # .h - "text/javascript" = gvim; - "text/x-python" = gvim; - "application/yaml" = gvim; # .yaml, .yml - # CSV - "text/csv" = gvim; - "text/markdown" = gvim; - # File Explorer - "inode/directory" = "org.kde.dolphin.desktop"; - "image/jpeg" = imageViewers; - "image/jpg" = imageViewers; - "image/png" = imageViewers; - "image/gif" = imageViewers; - "image/bmp" = imageViewers; - "image/avif" = imageViewers; - "image/webp" = imageViewers; - - # Microsoft Office - "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" = "onlyoffice-desktopeditors.desktop"; - "application/vnd.openxmlformats-officedocument.wordprocessingml.document" = "onlyoffice-desktopeditors.desktop"; - "application/vnd.openxmlformats-officedocument.presentationml.presentation" = "onlyoffice-desktopeditors.desktop"; - + defaultApplications = + mkAssoc "org.kde.okular.desktop" ["application/pdf"] + // mkAssoc gvim simpleText + // { + "inode/directory" = "org.kde.dolphin.desktop"; + } + // mkAssoc imageViewers image + // mkAssoc "onlyoffice-desktopeditors.desktop" [ + "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" + "application/vnd.openxmlformats-officedocument.wordprocessingml.document" + "application/vnd.openxmlformats-officedocument.presentationml.presentation" + ] # Audio: # music: elisa: fully featured, good cjk support # audio: mpv: simple and fast - "audio/flac" = audioPlayers; - "audio/vnd.wave" = audioPlayers; # .wav - - # Browser - "text/html" = browsers; - "x-scheme-handler/http" = browsers; - "x-scheme-handler/https" = browsers; - # URL Scheme - "x-scheme-handler/tg" = "org.telegram.desktop.desktop"; - "x-scheme-handler/tonsite" = "org.telegram.desktop.desktop"; - - # Archives - "application/zip" = archiveManager; - "application/x-rar" = archiveManager; - "application/x-7z-compressed" = archiveManager; - "application/x-tar" = archiveManager; - "application/x-zstd-compressed-tar" = archiveManager; # .tar.zst - }; + // mkAssoc audioPlayers audio + // mkAssoc browsers browser + // mkAssoc "org.telegram.desktop.desktop" [ + "x-scheme-handler/tg" + "x-scheme-handler/tonsite" + ] + // mkAssoc archiveManager archive; }; home.sessionVariables.BROWSER = "firefox"; } diff --git a/nixcfgs/users/js0ny/zephyrus.nix b/nixcfgs/users/js0ny/zephyrus.nix index b61687f..681ac2a 100644 --- a/nixcfgs/users/js0ny/zephyrus.nix +++ b/nixcfgs/users/js0ny/zephyrus.nix @@ -68,7 +68,7 @@ ./programs/walker.nix # Desktop Linux - ./programs/desktop/wayland-wm/hyprland + ./programs/desktop/plasma ./programs/desktop/wayland-wm/niri ../../modules/home/do-not-track.nix