init: public

This commit is contained in:
2025-04-13 15:09:14 +08:00
parent 5995c2050b
commit 50247d94e8
253 changed files with 12964 additions and 567 deletions

View File

@@ -0,0 +1,259 @@
{
config,
lib,
pkgs,
...
}:
{
my.home.systemd.user.services.swaync.Unit.After = [ "graphical-session.target" ];
my.home.programs.niri.settings = {
input = {
focus-follows-mouse = {
enable = true;
max-scroll-amount = "40%";
};
workspace-auto-back-and-forth = true;
};
layout = {
gaps = 23;
center-focused-column = "never";
always-center-single-column = true;
focus-ring.enable = false;
border = {
enable = true;
width = 4;
inactive.color = "#2e2e3eee";
active.gradient = {
from = "#6186d6ee";
to = "#cba6f7ee";
angle = 180;
relative-to = "workspace-view";
};
};
preset-column-widths = [
{ proportion = 0.33333; }
{ proportion = 0.4; }
{ proportion = 0.5; }
{ proportion = 0.6; }
{ proportion = 0.66667; }
];
default-column-width.proportion = 0.4;
};
animations = {
enable = true;
slowdown = 1.5;
workspace-switch.spring = {
damping-ratio = 1.0;
stiffness = 1000;
epsilon = 0.0001;
};
};
prefer-no-csd = true;
hotkey-overlay.skip-at-startup = true;
window-rules = [
{
geometry-corner-radius = {
bottom-left = 14.;
bottom-right = 14.;
top-left = 14.;
top-right = 14.;
};
clip-to-geometry = true;
draw-border-with-background = false;
}
{
matches = [ { app-id = "kitty|foot|Alacritty|ghostty|chromium-browser|wofi"; } ];
opacity = 0.8;
}
{
matches = [ { app-id = "org.gnome.Nautilus|nemo"; } ];
opacity = 0.6;
}
];
environment = {
QT_QPA_PLATFORM = "wayland;xcb";
XDG_SESSION_TYPE = "wayland";
XDG_CURRENT_DESKTOP = "niri";
XDG_SESSION_DESKTOP = "niri";
QT_AUTO_SCREEN_SCALE_FACTOR = "1";
STEAM_FORCE_DESKTOPUI_SCALING = "1.25";
DISPLAY = ":0";
};
spawn-at-startup = map (c: { command = c; }) [
[
"alacritty"
"--daemon"
]
[ "${lib.getExe pkgs.xwayland-satellite-unstable}" ]
[
"${lib.getExe pkgs.swaybg}"
"-i"
(toString ./wallpaper.png)
]
[
"${lib.getExe pkgs.wl-clip-persist}"
"--clipboard"
"regular"
]
[
"wl-paste"
"--type"
"text"
"--watch"
"cliphist"
"store"
]
[
"wl-paste"
"--type"
"image"
"--watch"
"cliphist"
"store"
]
];
binds =
with config.my.home.lib.niri.actions;
{
"Ctrl+Alt+T".action.spawn = [
"alacritty"
"msg"
"create-window"
];
"Mod+T".action.spawn = [
"alacritty"
"msg"
"create-window"
];
"Mod+Return".action.spawn = [
"alacritty"
"msg"
"create-window"
];
"Mod+G".action.spawn = [ "chromium" ];
"Mod+E".action.spawn = [ "nemo" ];
"Mod+R".action.spawn = [
"sh"
"-c"
"pkill wofi || wofi --color ~/.config/wal/colors"
];
"Mod+V".action.spawn = [
"sh"
"-c"
"pkill ${lib.getExe pkgs.wofi} || ${lib.getExe pkgs.cliphist} list | wofi --dmenu --color ~/.config/wal/colors | cliphist decode | wl-copy"
];
"XF86AudioRaiseVolume" = {
allow-when-locked = true;
action.spawn = [
"pamixer"
"-i"
"2"
];
};
"XF86AudioLowerVolume" = {
allow-when-locked = true;
action.spawn = [
"pamixer"
"-d"
"2"
];
};
"XF86AudioMute" = {
allow-when-locked = true;
action.spawn = [
"playerctl"
"-i"
"firefox,chromium"
"play-pause"
];
};
"Mod+XF86AudioRaiseVolume" = {
allow-when-locked = true;
action.spawn = [
"playerctl"
"-i"
"firefox,chromium"
"next"
];
};
"Mod+XF86AudioLowerVolume" = {
allow-when-locked = true;
action.spawn = [
"playerctl"
"-i"
"firefox,chromium"
"previous"
];
};
"Mod+Q".action = close-window;
"Mod+Left".action = focus-column-left;
"Mod+Right".action = focus-column-right;
"Mod+Up".action = focus-window-up;
"Mod+Down".action = focus-window-down;
"Mod+Ctrl+Left".action = move-column-left;
"Mod+Ctrl+Right".action = move-column-right;
"Mod+Ctrl+Up".action = move-window-up;
"Mod+Ctrl+Down".action = move-window-down;
"Mod+Shift+Left".action = focus-monitor-left;
"Mod+Shift+Right".action = focus-monitor-right;
"Mod+Shift+Up".action = focus-monitor-up;
"Mod+Shift+Down".action = focus-monitor-down;
"Mod+Shift+Ctrl+Left".action = move-column-to-monitor-left;
"Mod+Shift+Ctrl+Right".action = move-column-to-monitor-right;
"Mod+Shift+Ctrl+Up".action = move-column-to-monitor-up;
"Mod+Shift+Ctrl+Down".action = move-column-to-monitor-down;
"Mod+Page_Up".action = focus-workspace-up;
"Mod+Page_Down".action = focus-workspace-down;
"Mod+Ctrl+Page_Up".action = move-column-to-workspace-up;
"Mod+Ctrl+Page_Down".action = move-column-to-workspace-down;
"Mod+Shift+Page_Up".action = move-workspace-up;
"Mod+Shift+Page_Down".action = move-workspace-down;
"Mod+Comma".action = consume-window-into-column;
"Mod+Period".action = expel-window-from-column;
"Mod+L".action = switch-preset-column-width;
"Mod+Shift+L".action = reset-window-height;
"Mod+M".action = maximize-column;
"Mod+Shift+M".action = fullscreen-window;
"Mod+C".action = center-column;
"Mod+F".action = toggle-window-floating;
"Mod+H".action = expand-column-to-available-width;
"Mod+Minus".action.set-column-width = "-10%";
"Mod+Equal".action.set-column-width = "+10%";
"Mod+Shift+Minus".action.set-window-height = "-10%";
"Mod+Shift+Equal".action.set-window-height = "+10%";
"Ctrl+Alt+A".action = screenshot;
# "Print".action = screenshot-screen;
"Alt+Print".action = screenshot-window;
"Mod+Shift+E".action = quit;
}
// lib.attrsets.mergeAttrsList (
map (n: {
"Mod+${toString n}".action.focus-workspace = n;
"Mod+Shift+${toString n}".action.move-column-to-workspace = n;
}) (lib.range 0 9)
);
};
}

View File

@@ -0,0 +1,87 @@
args@{
lib,
config,
pkgs,
...
}:
let
cfg = config.my.desktop.wm.niri;
pkg = pkgs.niri-unstable;
in
{
options.my.desktop.wm.niri = {
enable = lib.mkEnableOption "Niri";
};
imports = [
(lib.mkIf cfg.enable (import ./config.nix args))
];
config = lib.mkIf cfg.enable {
xdg.portal = {
enable = true;
config = {
niri = {
default = [
"gnome"
"gtk"
];
"org.freedesktop.impl.portal.Access" = [ "gtk" ];
"org.freedesktop.impl.portal.FileChooser" = [ "gtk" ];
"org.freedesktop.impl.portal.Notification" = [ "gtk" ];
"org.freedesktop.impl.portal.RemoteDesktop" = [ "gnome" ];
"org.freedesktop.impl.portal.ScreenCast" = [ "gnome" ];
"org.freedesktop.impl.portal.Screenshot" = [ "gnome" ];
"org.freedesktop.impl.portal.Secret" = [ "gnome-keyring" ];
};
};
extraPortals = with pkgs; [
xdg-desktop-portal-gtk
xdg-desktop-portal-gnome
];
};
programs.uwsm = {
enable = true;
waylandCompositors = {
niri = {
prettyName = "niri";
comment = "Niri compositor managed by UWSM";
binPath = pkgs.writeShellScript "niri-session" ''
${lib.getExe pkg} --session
'';
};
};
};
programs.niri = {
enable = true;
package = pkg;
};
my.home = {
home.packages = with pkgs; [
wlr-randr
wl-clipboard
wl-clip-persist
cliphist
swaynotificationcenter
nemo-with-extensions
];
programs.wofi.enable = true;
xdg.configFile."wofi" = {
source = ./wofi;
recursive = true;
};
xdg.configFile."wal" = {
source = ./wal;
recursive = true;
};
programs.waybar = {
enable = true;
systemd.enable = true;
};
xdg.configFile."waybar/config.jsonc".text = builtins.toJSON (import ./waybar/config.nix args);
xdg.configFile."waybar/style.css" = {
source = ./waybar/style.css;
};
};
};
}

View File

@@ -0,0 +1,6 @@
#1e1e2e
#262636
#d9e0ee
#89b4fa
#f38ba8
#cba6f7

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

View File

@@ -0,0 +1,118 @@
{ ... }:
{
layer = "top";
position = "top";
mod = "dock";
exclusive = true;
passthrough = false;
gtk-layer-shell = true;
height = 0;
modules-left = [
"clock"
"cpu"
"memory"
"niri/workspaces"
];
modules-center = [
"mpris"
];
modules-right = [
"custom/notification"
"tray"
"pulseaudio"
"pulseaudio#microphone"
];
"niri/workspaces" = {
format = "{value}";
};
cpu = {
interval = 1;
format = "󰞱 {}%";
max-length = 10;
on-click = "";
};
memory = {
interval = 10;
format = " {used:0.1f}G";
max-length = 10;
};
"custom/notification" = {
tooltip = false;
format = "{icon}";
format-icons = {
notification = "<span foreground='red'><sup></sup></span>";
none = "";
dnd-notification = "<span foreground='red'><sup></sup></span>";
dnd-none = "";
inhibited-notification = "<span foreground='red'><sup></sup></span>";
inhibited-none = "";
dnd-inhibited-notification = "<span foreground='red'><sup></sup></span>";
dnd-inhibited-none = "";
};
return-type = "json";
exec-if = "which swaync-client";
exec = "swaync-client -swb";
on-double-click = "swaync-client -t -sw";
on-click-right = "swaync-client -d -sw";
escape = true;
};
tray = {
icon-size = 13;
tooltip = false;
spacing = 10;
};
mpris = {
player = "musicfox";
interval = 1;
format = "{status_icon} {artist} - {title}";
max-length = 60;
status-icons = {
paused = "";
playing = "";
stopped = "";
};
tooltip = false;
toottip-format = "{status_icon} Musicfox {artist} - {album} - {title}";
on-scroll-up = "playerctl -p musicfox volume 0.05+";
on-scroll-down = "playerctl -p musicfox volume 0.05-";
};
clock = {
format = " {:%H:%M %m.%d}";
tooltip = false;
};
pulseaudio = {
format = "{icon} {volume}%";
tooltip = false;
format-muted = "󰟎 Muted";
on-click = "pamixer -t";
on-click-middle = "pavucontrol & disown";
on-scroll-up = "pamixer -i 5";
on-scroll-down = "pamixer -d 5";
scroll-step = 5;
format-icons = {
headphone = "󰋋";
hands-free = "󰋋";
headset = "󰋋";
phone = "";
portable = "";
car = "";
default = [
""
""
""
];
};
};
"pulseaudio#microphone" = {
format = "{format_source}";
tooltip = false;
format-source = "󰍬 {volume}%";
format-source-muted = "󰍭 Muted";
on-click = "pamixer --default-source -t";
on-scroll-up = "pamixer --default-source -i 5";
on-scroll-down = "pamixer --default-source -d 5";
scroll-step = 5;
};
}

View File

@@ -0,0 +1,247 @@
* {
border: none;
border-radius: 0;
font-family: monospace;
font-weight: bold;
font-size: 14px;
min-height: 0;
}
window#waybar {
background: rgba(21, 18, 27, 0);
color: #cdd6f4;
}
tooltip {
color: #cdd6f4;
font-family: monospace;
background: #1e1e2e;
border-radius: 10px;
border-width: 2px;
border-style: solid;
border-color: #2a2c36;
}
tooltip label {
color: #cdd6f4;
}
tooltip.background {
background-clip: padding-box;
}
tooltip * {
padding: 4px;
background-color: transparent;
color: white;
}
#workspaces button {
padding: 5px;
color: #313244;
margin-right: 5px;
}
#workspaces button.focused {
color: #a6adc8;
border-radius: 10px;
}
#workspaces button.urgent {
color: #11111b;
background: #a6e3a1;
border-radius: 10px;
}
#workspaces button:hover {
background: #11111b;
color: #cdd6f4;
border-radius: 10px;
}
#taskbar button {
padding: 5px;
color: #313244;
margin-right: 5px;
}
#taskbar button.focused {
color: #a6adc8;
background: #eba0ac;
border-radius: 10px;
}
#taskbar button.urgent {
color: #11111b;
background: #a6e3a1;
border-radius: 10px;
}
#workspaces button:hover {
background: #11111b;
color: #cdd6f4;
border-radius: 10px;
}
#tray menu {
color: #cdd6f4;
font-family: monospace;
background: #1e1e2e;
border-radius: 10px;
border-width: 2px;
border-style: solid;
border-color: #2a2c36;
}
#custom-language,
#custom-updates,
#custom-caffeine,
#custom-weather,
#window,
#clock,
#battery,
#pulseaudio,
#network,
#workspaces,
#taskbar,
#tray,
#custom-notification,
#mpd,
#mpris,
#cpu,
#memory,
#backlight {
background: #1e1e2e;
padding: 0px 10px;
margin: 3px 0px;
margin-top: 10px;
border: 1px solid #181825;
}
#tray {
border-radius: 10px;
margin-right: 10px;
}
#workspaces {
background: #1e1e2e;
border-radius: 10px;
margin-left: 10px;
padding-right: 0px;
padding-left: 5px;
}
#taskbar {
background: #1e1e2e;
border-radius: 10px;
margin-left: 10px;
padding-right: 0px;
padding-left: 5px;
}
#custom-language {
color: #f38ba8;
border-left: 0px;
border-right: 0px;
}
#custom-updates {
color: #f5c2e7;
border-left: 0px;
border-right: 0px;
border-radius: 10px 0px 0px 10px;
}
#custom-notification {
color: #cdd6f4;
font-size: 20px;
border-radius: 10px;
margin-right: 10px;
}
#mpd {
color: rgba(97, 134, 214, 0.973);
background: #1e1e2e;
border-radius: 10px;
border: 1px solid #181825;
}
#mpris {
color: rgba(97, 134, 214, 0.973);
background: #1e1e2e;
border-radius: 10px;
border: 1px solid #181825;
margin-right: 10px;
}
#window {
border-radius: 10px;
margin-left: 60px;
margin-right: 60px;
}
#window.empty {
border-radius: 0px;
background-color: transparent;
}
window#waybar.empty #window {
padding: 0px;
margin: 0px;
border: 0px;
background-color: transparent;
}
#clock {
color: #fab387;
border-radius: 10px 0px 0px 10px;
margin-left: 5px;
border-right: 0px;
}
#network {
color: #f9e2af;
border-left: 0px;
border-right: 0px;
}
#cpu {
color: #fab387;
border-radius: 0;
border-left: 0;
border-right: 0;
}
#memory {
color: #fab387;
border-radius: 0px 10px 10px 0px;
border-left: 0;
border-right: 0;
}
#pulseaudio {
color: #89b4fa;
border-right: 0px;
border-radius: 10px 0px 0px 10px;
}
#pulseaudio.microphone {
color: #cba6f7;
margin-right: 5px;
border-left: 0px;
border-radius: 0 10px 10px 0;
}
#battery {
color: #a6e3a1;
border-radius: 0 10px 10px 0;
margin-right: 10px;
border-left: 0px;
}
#custom-weather {
border-radius: 0px 10px 10px 0px;
border-left: 0;
border-right: 0;
margin-left: 0px;
}

View File

@@ -0,0 +1,39 @@
## Wofi Config
## General
show=drun
prompt=Apps
normal_window=true
layer=top
term=kitty
## Geometry
width=500px
height=305px
location=0
orientation=vertical
halign=fill
line_wrap=off
dynamic_lines=false
## Images
allow_markup=true
allow_images=true
image_size=24
## Search
exec_search=false
hide_search=false
parse_search=false
insensitive=false
## Other
hide_scroll=true
no_actions=true
sort_order=default
gtk_dark=true
filter_rate=100
## Keys
key_expand=Tab
key_exit=Escape

View File

@@ -0,0 +1,64 @@
/*
* Copyright (C) 2020-2022 Aditya Shakya <adi1090x@gmail.com>
*/
/** ********** Fonts ********** **/
* {
font-family: monospace;
font-size: 12px;
}
#window {
background-color: --wofi-color0;
color: --wofi-color2;
border: 2px solid --wofi-color1;
border-radius: 0px;
}
#outer-box {
padding: 20px;
}
#input {
background-color: --wofi-color1;
border: 0px solid --wofi-color3;
padding: 8px 12px;
}
#scroll {
margin-top: 20px;
}
#inner-box {
}
#img {
padding-right: 8px;
}
#text {
color: --wofi-color2;
}
#text:selected {
color: --wofi-color0;
}
#entry {
padding: 6px;
}
#entry:selected {
background-color: --wofi-color3;
color: --wofi-color0;
}
#unselected {
}
#selected {
}
#input, #entry:selected {
border-radius: 4px;
}