Several hyprland updates:
plugins, new cursor, light/dark themes, new app launcher, ...
This commit is contained in:
@@ -13,6 +13,17 @@
|
||||
${pkgs.dconf}/bin/dconf write \
|
||||
/org/gnome/desktop/interface/gtk-theme "'Orchis-Dark-Compact'"
|
||||
'';
|
||||
cursor-theme = ''
|
||||
${pkgs.dconf}/bin/dconf write \
|
||||
/org/gnome/desktop/interface/cursor-theme "'Nordzy-cursors'"
|
||||
|
||||
# Set environment variables for current session
|
||||
export HYPRCURSOR_THEME="Nordzy-cursors"
|
||||
export XCURSOR_THEME="Nordzy-cursors"
|
||||
|
||||
# Update Hyprland cursor theme
|
||||
${pkgs.hyprland}/bin/hyprctl setcursor Nordzy-cursors 42
|
||||
'';
|
||||
};
|
||||
lightModeScripts = {
|
||||
gtk-theme = ''
|
||||
@@ -21,10 +32,23 @@
|
||||
${pkgs.dconf}/bin/dconf write \
|
||||
/org/gnome/desktop/interface/gtk-theme "'Orchis-Compact'"
|
||||
'';
|
||||
cursor-theme = ''
|
||||
${pkgs.dconf}/bin/dconf write \
|
||||
/org/gnome/desktop/interface/cursor-theme "'Nordzy-white'"
|
||||
|
||||
# Set environment variables for current session
|
||||
export HYPRCURSOR_THEME="Nordzy-white"
|
||||
export XCURSOR_THEME="Nordzy-white"
|
||||
|
||||
# Update Hyprland cursor theme
|
||||
${pkgs.hyprland}/bin/hyprctl setcursor Nordzy-white 42
|
||||
'';
|
||||
};
|
||||
};
|
||||
|
||||
xdg.configFile."darkman/config.yaml".text = ''
|
||||
usegeoclue: true
|
||||
lat: 41.55
|
||||
lng: -8.42
|
||||
dbusserver: true
|
||||
'';
|
||||
}
|
||||
|
||||
@@ -1,14 +1,16 @@
|
||||
{ pkgs, inputs, ... }:
|
||||
let
|
||||
nordzy-cursors = pkgs.callPackage ../../../../pkgs/nordzy-cursors/package.nix { };
|
||||
in
|
||||
{
|
||||
home.packages = with pkgs; [
|
||||
rose-pine-cursor
|
||||
inputs.rose-pine-hyprcursor.packages.${pkgs.stdenv.hostPlatform.system}.default
|
||||
home.packages = [
|
||||
nordzy-cursors
|
||||
];
|
||||
|
||||
home.sessionVariables = {
|
||||
HYPRCURSOR_THEME = "BreezeX-RosePine-Linux";
|
||||
HYPRCURSOR_THEME = "Nordzy-cursors"; # Dark variant (default)
|
||||
HYPRCURSOR_SIZE = 32;
|
||||
XCURSOR_THEME = "BreezeX-RosePine-Linux";
|
||||
XCURSOR_THEME = "Nordzy-cursors";
|
||||
XCURSOR_SIZE = 32;
|
||||
};
|
||||
|
||||
|
||||
@@ -1,12 +1,19 @@
|
||||
{ config, pkgs, ... }:
|
||||
{
|
||||
config,
|
||||
inputs,
|
||||
pkgs,
|
||||
...
|
||||
}:
|
||||
let
|
||||
rofiLaunchers = import ../../../pkgs/rofi-launchers/package.nix { };
|
||||
in
|
||||
{
|
||||
imports = [
|
||||
./rofi.nix
|
||||
./walker.nix
|
||||
./cursor.nix
|
||||
./hyprpanel.nix
|
||||
./waybar.nix
|
||||
./quickshell.nix
|
||||
];
|
||||
|
||||
home.packages = with pkgs; [
|
||||
@@ -25,7 +32,34 @@ in
|
||||
|
||||
wayland.windowManager.hyprland = {
|
||||
enable = true;
|
||||
package = null;
|
||||
portalPackage = null;
|
||||
plugins = [
|
||||
inputs.hyprland-plugins.packages.${pkgs.stdenv.hostPlatform.system}.hyprexpo
|
||||
inputs.hyprland-plugins.packages.${pkgs.stdenv.hostPlatform.system}.hyprfocus
|
||||
# inputs.hyprspace.packages.${pkgs.stdenv.hostPlatform.system}.Hyprspace
|
||||
];
|
||||
settings = {
|
||||
plugin = {
|
||||
hyprexpo = {
|
||||
columns = 3;
|
||||
gap_size = 5;
|
||||
bg_col = "rgb(000000)";
|
||||
workspace_method = "center current";
|
||||
};
|
||||
hyprfocus = {
|
||||
enabled = true;
|
||||
mode = "flash";
|
||||
flash_opacity = 1.8; # Flash brighter instead of dimmer
|
||||
};
|
||||
overview = {
|
||||
autoDrag = true;
|
||||
exitOnClick = true;
|
||||
exitOnSwitch = true;
|
||||
showNewWorkspace = false;
|
||||
showEmptyWorkspace = false;
|
||||
};
|
||||
};
|
||||
input = {
|
||||
kb_options = "ctrl:nocaps";
|
||||
repeat_delay = 150;
|
||||
@@ -71,34 +105,17 @@ in
|
||||
blur = {
|
||||
enabled = true;
|
||||
# new_optimizations = false;
|
||||
popups = false;
|
||||
};
|
||||
shadow = {
|
||||
enabled = false;
|
||||
};
|
||||
};
|
||||
|
||||
# keep default animations, but speed them all up
|
||||
animations = {
|
||||
bezier = [
|
||||
"wind, 0.05, 0.9, 0.1, 1.0"
|
||||
"winIn, 0.1, 1.0, 0.1, 1.0"
|
||||
"winOut, 0.3, -0.3, 0, 1"
|
||||
"liner, 1, 1, 1, 1"
|
||||
"fadeIn, 0, 0, 0.98, 1"
|
||||
];
|
||||
animation = [
|
||||
"windows, 1, 2, wind, popin 80%"
|
||||
"windowsIn, 1, 2, fadeIn, popin 80%"
|
||||
"windowsOut, 1, 5, winOut, popin 80%"
|
||||
"windowsMove, 1, 5, wind, slide"
|
||||
"border, 1, 1, liner"
|
||||
"borderangle, 1, 30, liner, loop"
|
||||
"fade, 1, 2, fadeIn"
|
||||
"fadeIn, 1, 2, fadeIn"
|
||||
"fadeOut, 1, 2, winOut"
|
||||
"workspaces, 1, 2, wind"
|
||||
"windowsMove, 0, 1, default, slide"
|
||||
# "specialWorkspace, 0, 2, default, fade"
|
||||
"specialWorkspace, 1, 2, fadeIn, fade"
|
||||
"global, 1, 2, default"
|
||||
];
|
||||
};
|
||||
|
||||
@@ -111,7 +128,6 @@ in
|
||||
|
||||
"exec-once" = [
|
||||
"dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP"
|
||||
"hyprpanel"
|
||||
"nm-applet"
|
||||
"hyprsunset"
|
||||
"nerd-dictation begin --simulate-input-tool WTYPE --suspend-on-start && touch ~/.cache/nerd-dictation-suspended"
|
||||
@@ -165,14 +181,19 @@ in
|
||||
"$mod" = "SUPER";
|
||||
|
||||
bind = [
|
||||
"$mod, g, hyprexpo:expo, toggle"
|
||||
# "$mod, tab, overview:toggle,"
|
||||
"$mod, b, exec, pkill waybar || waybar"
|
||||
"$mod, t, exec, kitty"
|
||||
"$mod, v, togglefloating"
|
||||
"$mod, q, killactive"
|
||||
"$mod, f, fullscreen, 0"
|
||||
"$mod SHIFT, f, fullscreen, 1"
|
||||
|
||||
# rofi
|
||||
"$mod, space, exec, launcher_t2"
|
||||
# walker app launcher
|
||||
"$mod, space, exec, walker"
|
||||
# rofi (old)
|
||||
# "$mod, space, exec, launcher_t2"
|
||||
|
||||
# nerd-dictation
|
||||
# "$mod, d, exec, nerd-dictation-toggle"
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
{ inputs, pkgs, ... }:
|
||||
{
|
||||
home.packages = [
|
||||
inputs.quickshell.packages.${pkgs.stdenv.hostPlatform.system}.default
|
||||
];
|
||||
|
||||
xdg.configFile."quickshell" = {
|
||||
source = ./quickshell;
|
||||
recursive = true;
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,94 @@
|
||||
import Quickshell
|
||||
import Quickshell.Hyprland
|
||||
import QtQuick
|
||||
import QtQuick.Layouts
|
||||
|
||||
Scope {
|
||||
id: root
|
||||
property bool barVisible: false
|
||||
|
||||
Variants {
|
||||
model: Quickshell.screens
|
||||
|
||||
Scope {
|
||||
id: perScreen
|
||||
required property var modelData
|
||||
|
||||
// invisible trigger zone at the top edge
|
||||
PanelWindow {
|
||||
id: trigger
|
||||
screen: perScreen.modelData
|
||||
visible: !root.barVisible
|
||||
|
||||
anchors {
|
||||
top: true
|
||||
left: true
|
||||
right: true
|
||||
}
|
||||
|
||||
exclusionMode: ExclusionMode.Ignore
|
||||
implicitHeight: 4
|
||||
color: "transparent"
|
||||
|
||||
MouseArea {
|
||||
anchors.fill: parent
|
||||
hoverEnabled: true
|
||||
onEntered: root.barVisible = true
|
||||
}
|
||||
}
|
||||
|
||||
// the actual bar
|
||||
PanelWindow {
|
||||
id: bar
|
||||
screen: perScreen.modelData
|
||||
visible: root.barVisible
|
||||
|
||||
anchors {
|
||||
top: true
|
||||
left: true
|
||||
right: true
|
||||
}
|
||||
|
||||
exclusionMode: ExclusionMode.Ignore
|
||||
implicitHeight: 32
|
||||
color: "#e611111b"
|
||||
|
||||
MouseArea {
|
||||
anchors.fill: parent
|
||||
hoverEnabled: true
|
||||
propagateComposedEvents: true
|
||||
// keep bar visible while mouse is on it
|
||||
onExited: hideTimer.restart()
|
||||
}
|
||||
|
||||
RowLayout {
|
||||
anchors.fill: parent
|
||||
anchors.leftMargin: 12
|
||||
anchors.rightMargin: 12
|
||||
spacing: 0
|
||||
|
||||
Workspaces {
|
||||
Layout.alignment: Qt.AlignLeft
|
||||
}
|
||||
|
||||
Item { Layout.fillWidth: true }
|
||||
|
||||
SysTray {
|
||||
Layout.alignment: Qt.AlignRight
|
||||
Layout.rightMargin: 16
|
||||
}
|
||||
|
||||
ClockWidget {
|
||||
Layout.alignment: Qt.AlignRight
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Timer {
|
||||
id: hideTimer
|
||||
interval: 500
|
||||
onTriggered: root.barVisible = false
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
import QtQuick
|
||||
import QtQuick.Layouts
|
||||
|
||||
RowLayout {
|
||||
spacing: 12
|
||||
|
||||
Text {
|
||||
text: Time.date
|
||||
font.family: "FiraCode Nerd Font"
|
||||
font.pixelSize: 13
|
||||
color: "#6c7086"
|
||||
}
|
||||
|
||||
Text {
|
||||
text: Time.clock
|
||||
font.family: "FiraCode Nerd Font"
|
||||
font.pixelSize: 14
|
||||
color: "#bac2de"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,47 @@
|
||||
import QtQuick
|
||||
import QtQuick.Layouts
|
||||
import QtQuick.Controls
|
||||
import Quickshell
|
||||
import Quickshell.Services.SystemTray
|
||||
|
||||
RowLayout {
|
||||
spacing: 6
|
||||
|
||||
Repeater {
|
||||
model: SystemTray.items
|
||||
|
||||
Image {
|
||||
required property SystemTrayItem modelData
|
||||
|
||||
Layout.preferredWidth: 18
|
||||
Layout.preferredHeight: 18
|
||||
source: modelData.icon
|
||||
fillMode: Image.PreserveAspectFit
|
||||
|
||||
MouseArea {
|
||||
anchors.fill: parent
|
||||
acceptedButtons: Qt.LeftButton | Qt.RightButton
|
||||
onClicked: (mouse) => {
|
||||
if (mouse.button === Qt.RightButton || modelData.onlyMenu) {
|
||||
modelData.display(bar, parent.x, bar.height)
|
||||
} else {
|
||||
modelData.activate()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
ToolTip {
|
||||
id: tooltip
|
||||
visible: hoverArea.containsMouse
|
||||
text: modelData.tooltipTitle || modelData.title || ""
|
||||
}
|
||||
|
||||
MouseArea {
|
||||
id: hoverArea
|
||||
anchors.fill: parent
|
||||
hoverEnabled: true
|
||||
acceptedButtons: Qt.NoButton
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
pragma Singleton
|
||||
|
||||
import Quickshell
|
||||
import QtQuick
|
||||
|
||||
Singleton {
|
||||
id: root
|
||||
readonly property string clock: Qt.formatDateTime(sysClock.date, "hh:mm")
|
||||
readonly property string date: Qt.formatDateTime(sysClock.date, "ddd MMM d")
|
||||
|
||||
SystemClock {
|
||||
id: sysClock
|
||||
precision: SystemClock.Minutes
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,41 @@
|
||||
import QtQuick
|
||||
import QtQuick.Layouts
|
||||
import Quickshell.Hyprland
|
||||
|
||||
RowLayout {
|
||||
spacing: 4
|
||||
|
||||
Repeater {
|
||||
model: [1, 2, 3, 4, 5, 6]
|
||||
|
||||
Rectangle {
|
||||
required property int modelData
|
||||
property bool active: Hyprland.focusedMonitor?.activeWorkspace?.id === modelData
|
||||
property bool occupied: {
|
||||
for (let i = 0; i < Hyprland.workspaces.values.length; i++) {
|
||||
let ws = Hyprland.workspaces.values[i];
|
||||
if (ws.id === modelData && ws.windows > 0) return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
Layout.preferredWidth: 24
|
||||
Layout.preferredHeight: 24
|
||||
radius: 4
|
||||
color: active ? "#b4befe" : "transparent"
|
||||
|
||||
Text {
|
||||
anchors.centerIn: parent
|
||||
text: modelData
|
||||
font.family: "FiraCode Nerd Font"
|
||||
font.pixelSize: 13
|
||||
color: active ? "#11111b" : occupied ? "#bac2de" : "#6c7086"
|
||||
}
|
||||
|
||||
MouseArea {
|
||||
anchors.fill: parent
|
||||
onClicked: Hyprland.dispatch("workspace " + modelData)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
import Quickshell
|
||||
|
||||
Scope {
|
||||
Bar {}
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
{ inputs, pkgs, ... }:
|
||||
{
|
||||
imports = [ inputs.walker.homeManagerModules.default ];
|
||||
|
||||
programs.walker = {
|
||||
enable = true;
|
||||
runAsService = true;
|
||||
|
||||
# Using default theme - clean dark theme with good defaults
|
||||
# You can customize later by copying from:
|
||||
# https://github.com/abenz1267/walker/tree/master/resources/themes/default
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,173 @@
|
||||
{ pkgs, ... }:
|
||||
{
|
||||
programs.waybar = {
|
||||
enable = true;
|
||||
settings = {
|
||||
mainBar = {
|
||||
layer = "top";
|
||||
position = "top";
|
||||
height = 32;
|
||||
exclusive = false;
|
||||
|
||||
modules-left = [ "hyprland/workspaces" ];
|
||||
modules-center = [ "hyprland/window" ];
|
||||
modules-right = [
|
||||
"tray"
|
||||
"bluetooth"
|
||||
"network"
|
||||
"pulseaudio"
|
||||
"battery"
|
||||
"clock"
|
||||
];
|
||||
|
||||
"hyprland/workspaces" = {
|
||||
format = "{icon}";
|
||||
format-icons = {
|
||||
"1" = "1";
|
||||
"2" = "2";
|
||||
"3" = "3";
|
||||
"4" = "4";
|
||||
"5" = "5";
|
||||
"6" = "6";
|
||||
};
|
||||
persistent-workspaces = {
|
||||
"*" = [ 1 2 3 4 5 6 ];
|
||||
};
|
||||
};
|
||||
|
||||
"hyprland/window" = {
|
||||
max-length = 50;
|
||||
};
|
||||
|
||||
tray = {
|
||||
icon-size = 16;
|
||||
spacing = 8;
|
||||
};
|
||||
|
||||
bluetooth = {
|
||||
format = "";
|
||||
format-disabled = "";
|
||||
format-connected = "";
|
||||
tooltip-format = "{controller_alias}\t{controller_address}";
|
||||
tooltip-format-connected = "{controller_alias}\t{controller_address}\n\n{device_enumerate}";
|
||||
tooltip-format-enumerate-connected = "{device_alias}\t{device_address}";
|
||||
on-click = "blueman-manager";
|
||||
};
|
||||
|
||||
network = {
|
||||
format-wifi = "";
|
||||
format-ethernet = "";
|
||||
format-disconnected = "";
|
||||
tooltip-format-wifi = "{essid} ({signalStrength}%)";
|
||||
tooltip-format-ethernet = "{ifname}: {ipaddr}/{cidr}";
|
||||
tooltip-format-disconnected = "Disconnected";
|
||||
};
|
||||
|
||||
pulseaudio = {
|
||||
format = "{icon}";
|
||||
format-muted = "";
|
||||
format-icons = {
|
||||
default = [ "" "" "" ];
|
||||
};
|
||||
tooltip-format = "{volume}%";
|
||||
on-click = "pavucontrol";
|
||||
on-click-right = "wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle";
|
||||
scroll-step = 5;
|
||||
};
|
||||
|
||||
battery = {
|
||||
format = "{icon} {capacity}%";
|
||||
format-charging = " {capacity}%";
|
||||
format-icons = [ "" "" "" "" "" "" "" "" "" "" ];
|
||||
states = {
|
||||
warning = 20;
|
||||
critical = 10;
|
||||
};
|
||||
};
|
||||
|
||||
clock = {
|
||||
format = "{:%H:%M}";
|
||||
tooltip-format = "{:%A, %B %d, %Y}";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
style = ''
|
||||
@define-color foreground #bac2de;
|
||||
@define-color background #11111b;
|
||||
@define-color active #b4befe;
|
||||
@define-color warning #f9e2af;
|
||||
@define-color critical #f38ba8;
|
||||
@define-color muted #6c7086;
|
||||
|
||||
* {
|
||||
background-color: transparent;
|
||||
color: @foreground;
|
||||
border: none;
|
||||
border-radius: 0;
|
||||
min-height: 0;
|
||||
font-family: FiraCode Nerd Font;
|
||||
font-size: 15px;
|
||||
}
|
||||
|
||||
window#waybar {
|
||||
background-color: @background;
|
||||
}
|
||||
|
||||
.modules-left {
|
||||
margin-left: 10px;
|
||||
}
|
||||
|
||||
.modules-right {
|
||||
margin-right: 10px;
|
||||
}
|
||||
|
||||
#workspaces button {
|
||||
padding: 0 6px;
|
||||
margin: 0 2px;
|
||||
color: @muted;
|
||||
}
|
||||
|
||||
#workspaces button.active {
|
||||
color: @active;
|
||||
}
|
||||
|
||||
#workspaces button.urgent {
|
||||
color: @critical;
|
||||
}
|
||||
|
||||
#window {
|
||||
color: @muted;
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
#tray,
|
||||
#bluetooth,
|
||||
#network,
|
||||
#pulseaudio,
|
||||
#battery,
|
||||
#clock {
|
||||
padding: 0 10px;
|
||||
color: @foreground;
|
||||
}
|
||||
|
||||
#battery.warning {
|
||||
color: @warning;
|
||||
}
|
||||
|
||||
#battery.critical {
|
||||
color: @critical;
|
||||
}
|
||||
|
||||
#pulseaudio.muted {
|
||||
color: @muted;
|
||||
}
|
||||
|
||||
tooltip {
|
||||
background-color: @background;
|
||||
border: 1px solid @muted;
|
||||
border-radius: 4px;
|
||||
}
|
||||
'';
|
||||
};
|
||||
}
|
||||
@@ -1,88 +0,0 @@
|
||||
{
|
||||
lib,
|
||||
config,
|
||||
pkgs,
|
||||
...
|
||||
}:
|
||||
{
|
||||
xsession.windowManager.i3 = {
|
||||
enable = true;
|
||||
package = pkgs.i3;
|
||||
config = {
|
||||
modifier = "Mod4";
|
||||
terminal = "${pkgs.kitty}/bin/kitty";
|
||||
gaps = {
|
||||
inner = 10;
|
||||
outer = 0;
|
||||
};
|
||||
keybindings =
|
||||
let
|
||||
modifier = config.xsession.windowManager.i3.config.modifier;
|
||||
in
|
||||
lib.mkOptionDefault {
|
||||
"${modifier}+h" = "focus left";
|
||||
"${modifier}+j" = "focus down";
|
||||
"${modifier}+k" = "focus up";
|
||||
"${modifier}+l" = "focus right";
|
||||
|
||||
"XF86AudioRaiseVolume" = "exec wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%+";
|
||||
"XF86AudioLowerVolume" = "exec wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-";
|
||||
"XF86AudioMute" = "exec pactl set-sink-mute @DEFAULT_SINK@ toggle";
|
||||
"XF86AudioMicMute" = "exec volumectl -m toggle-mute";
|
||||
"XF86AudioNext" = "exec playerctl next";
|
||||
"XF86AudioPrev" = "exec playerctl previous";
|
||||
"XF86AudioPlay" = "exec playerctl play-pause";
|
||||
|
||||
"XF86MonBrightnessUp" = "exec brightnessctl set 5%+";
|
||||
"XF86MonBrightnessDown" = "exec brightnessctl set 5%-";
|
||||
|
||||
"Print" = "exec flameshot gui";
|
||||
|
||||
"${modifier}+space" = "exec launcher_t2";
|
||||
};
|
||||
bars = [
|
||||
{
|
||||
position = "top";
|
||||
statusCommand = "i3status-rs ~/.config/i3status-rust/config-default.toml";
|
||||
}
|
||||
];
|
||||
};
|
||||
extraConfig = ''
|
||||
smart_gaps on
|
||||
hide_edge_borders smart_no_gaps
|
||||
|
||||
for_window [class="kitty"] border none
|
||||
for_window [class="kitty"] gaps inner current set 0
|
||||
for_window [class="kitty"] gaps outer current set 0
|
||||
|
||||
for_window [class="^zen"] border none
|
||||
for_window [class="^zen"] gaps inner current set 0
|
||||
for_window [class="^zen"] gaps outer current set 0
|
||||
'';
|
||||
};
|
||||
|
||||
programs = {
|
||||
i3status-rust = {
|
||||
enable = true;
|
||||
};
|
||||
};
|
||||
|
||||
# services.picom = {
|
||||
# enable = true;
|
||||
# backend = "glx";
|
||||
# vSync = true;
|
||||
# };
|
||||
|
||||
services.flameshot = {
|
||||
enable = true;
|
||||
|
||||
settings.General = {
|
||||
drawFontSize = 10;
|
||||
};
|
||||
};
|
||||
|
||||
xdg.portal = {
|
||||
enable = true;
|
||||
xdgOpenUsePortal = true;
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user