1
1
Fork 0

Compare commits

...

11 commits

Author SHA1 Message Date
cf486d7735
niri: potentially fix cursor theme in some applications
Signed-off-by: Myned <dev@bjork.tech>
2024-12-26 19:14:57 -05:00
7827d05eb7
starship: modify config
Signed-off-by: Myned <dev@bjork.tech>
2024-12-26 19:13:06 -05:00
c324b5a115
waybar: refactor config
Signed-off-by: Myned <dev@bjork.tech>
2024-12-26 19:13:06 -05:00
4c593ab11f
kitty: modify config
Signed-off-by: Myned <dev@bjork.tech>
2024-12-26 19:13:06 -05:00
0716de4245
niri: add startup commands
Signed-off-by: Myned <dev@bjork.tech>
2024-12-26 19:13:06 -05:00
1879223bfe
swaync: modify config
Signed-off-by: Myned <dev@bjork.tech>
2024-12-26 19:13:06 -05:00
8715c6d1e4
gnome: add fractional scaling experimental feature
Signed-off-by: Myned <dev@bjork.tech>
2024-12-26 19:13:06 -05:00
da3a049ea2
programs: disable unused modules
Signed-off-by: Myned <dev@bjork.tech>
2024-12-26 19:13:06 -05:00
baed356708
niri: modify input sensitivity
Signed-off-by: Myned <dev@bjork.tech>
2024-12-26 19:13:06 -05:00
654b594643
nix: use lib where possible
Signed-off-by: Myned <dev@bjork.tech>
2024-12-26 19:13:06 -05:00
48e84a857d
gnome: add minimal option with core-os-services
Signed-off-by: Myned <dev@bjork.tech>
2024-12-26 19:06:11 -05:00
21 changed files with 593 additions and 487 deletions

View file

@ -8,7 +8,13 @@ with lib; let
in {
options.custom.desktops = {
enable = mkOption {default = config.custom.minimal;};
desktop = mkOption {default = "niri";};
desktop = mkOption {
default =
if config.custom.full
then "niri"
else "gnome";
};
};
config = mkIf cfg.enable {

View file

@ -1,7 +1,6 @@
{
config,
lib,
pkgs,
...
}:
with lib; let
@ -10,22 +9,23 @@ in {
options.custom.desktops.gnome = {
enable = mkOption {default = false;};
gdm = mkOption {default = true;};
minimal = mkOption {default = false;};
};
config = mkIf cfg.enable {
# https://wiki.nixos.org/wiki/GNOME
# FIXME: xdg-desktop-portal-[gnome|gtk] not working through steam
services = {
xserver = {
xserver = mkIf (!cfg.minimal) {
enable = true;
desktopManager.gnome.enable = true;
displayManager.gdm.enable = cfg.gdm;
};
gnome.gnome-browser-connector.enable = true; # Install extensions from browser
gnome = {
core-os-services.enable = mkIf cfg.minimal true;
gnome-browser-connector.enable = !cfg.minimal;
};
};
# Remove default packages
# https://wiki.nixos.org/wiki/GNOME#Excluding_GNOME_Applications
environment.gnome.excludePackages = [pkgs.gnome-shell-extensions];
};
}

View file

@ -10,13 +10,20 @@ in {
options.custom.desktops.hyprland.enable = mkOption {default = false;};
config = mkIf cfg.enable {
custom.desktops.hyprland = mkIf config.custom.full {
custom.desktops = mkIf config.custom.full {
hyprland = {
binds.enable = true;
plugins.enable = true;
rules.enable = true;
settings.enable = true;
};
gnome = {
enable = true;
minimal = true;
};
};
# https://github.com/hyprwm/Hyprland
programs.hyprland.enable = true;

View file

@ -158,7 +158,7 @@ in {
merge = field: expr: rules:
map (
rule:
if builtins.isAttrs field
if isAttrs field
then "${rule}, ${lib.concatStringsSep ", " (lib.mapAttrsToList (f: e: format f e) field)}"
else "${rule}, ${format field expr}"
)

View file

@ -15,7 +15,8 @@ in {
};
config = mkIf cfg.enable {
custom.desktops.niri = mkIf config.custom.full {
custom.desktops = mkIf config.custom.full {
niri = {
binds.enable = true;
input.enable = true;
layout.enable = true;
@ -23,6 +24,12 @@ in {
rules.enable = true;
};
gnome = {
enable = true;
minimal = true;
};
};
# https://github.com/YaLTeR/niri
# https://github.com/sodiboo/niri-flake
# https://github.com/sodiboo/niri-flake/blob/main/docs.md

View file

@ -25,7 +25,7 @@ in {
click-method = "clickfinger"; # Multi-finger click
dwt = true; # Disable while typing
dwtp = true; # Disable while trackpointing
scroll-factor = 0.5;
scroll-factor = 0.4;
};
# BUG: Applies to trackball device, switch to "flat" when per-device configuration is supported
@ -33,7 +33,7 @@ in {
mouse = {
accel-profile = "adaptive";
accel-speed = -0.1;
accel-speed = -0.2;
};
trackball = {

View file

@ -5,8 +5,12 @@
...
}:
with lib; let
_1password = "${config.programs._1password-gui.package}/bin/1password";
audio = config.home-manager.users.${config.custom.username}.home.file.".local/bin/audio".source;
niri = "${config.programs.niri.package}/bin/niri";
rm = "${pkgs.coreutils}/bin/rm";
sway-audio-idle-inhibit = "${pkgs.sway-audio-idle-inhibit}/bin/sway-audio-idle-inhibit";
wallpaper = "${config.home-manager.users.${config.custom.username}.home.file.".local/bin/wallpaper".source}";
cfg = config.custom.desktops.niri.misc;
in {
@ -19,8 +23,19 @@ in {
programs.niri.settings = {
# https://github.com/YaLTeR/niri/wiki/Configuration:-Miscellaneous
spawn-at-startup = [
# https://github.com/YaLTeR/niri/wiki/Configuration:-Miscellaneous#spawn-at-startup
# https://github.com/YaLTeR/niri/wiki/Configuration:-Key-Bindings#actions
spawn-at-startup = let
home = config.home-manager.users.${config.custom.username}.home.homeDirectory;
in
[
{command = [_1password "--silent"];} # Launch password manager in background
{command = [audio "--init"];} # Enforce audio profile state
{command = [rm "${home}/.cache/walker/clipboard.gob"];} # Clear clipboard history
{command = [sway-audio-idle-inhibit];} # Inhibit while audio is playing
]
++ optionals config.custom.wallpaper [
{command = [wallpaper];}
];
# HACK: Inherit home-manager environment variables in lieu of upstream fix
@ -30,12 +45,18 @@ in {
mapAttrs (name: value: toString value)
config.home-manager.users.${config.custom.username}.home.sessionVariables;
cursor = {
# https://github.com/YaLTeR/niri/wiki/Configuration:-Miscellaneous#cursor
cursor = with config.home-manager.users.${config.custom.username}.home.pointerCursor; {
inherit size;
hide-after-inactive-ms = 1000 * 15; # Milliseconds
hide-when-typing = true;
theme = name;
};
# https://github.com/YaLTeR/niri/wiki/Configuration:-Miscellaneous#hotkey-overlay
hotkey-overlay.skip-at-startup = true;
# https://github.com/YaLTeR/niri/wiki/Configuration:-Miscellaneous#prefer-no-csd
prefer-no-csd = true;
# https://github.com/YaLTeR/niri/wiki/Configuration:-Switch-Events

View file

@ -9,7 +9,8 @@ in {
options.custom.desktops.sway.enable = mkOption {default = false;};
config = mkIf cfg.enable {
custom.desktops.sway = mkIf config.custom.full {
custom.desktops = mkIf config.custom.full {
sway = {
binds.enable = true;
input.enable = true;
output.enable = true;
@ -18,6 +19,12 @@ in {
swayfx.enable = true;
};
gnome = {
enable = true;
minimal = true;
};
};
# https://wiki.nixos.org/wiki/Sway
# https://wiki.archlinux.org/title/Sway
# https://github.com/swaywm/sway

View file

@ -43,10 +43,10 @@ with lib; {
(mkIf config.custom.full {
_1password.enable = true;
adb.enable = true;
ags.enable = true;
#// ags.enable = true;
#// anyrun.enable = true;
#// bitwarden-menu.enable = true;
clipse.enable = true;
#// clipse.enable = true;
discord.enable = true;
element-desktop.enable = true;
#// fuzzel.enable = true;
@ -67,13 +67,13 @@ with lib; {
obs-studio.enable = true;
onlyoffice.enable = true;
#// onedrive.enable = true;
path-of-building.enable = true;
rbw.enable = true;
#// path-of-building.enable = true;
#// rbw.enable = true;
remmina.enable = true;
rofi-rbw.enable = true;
rofi.enable = true;
#// rofi-rbw.enable = true;
#// rofi.enable = true;
seahorse.enable = true;
slurp.enable = true;
#// slurp.enable = true;
steam.enable = true;
#// swaylock.enable = true;
#// thunderbird.enable = true;
@ -82,7 +82,7 @@ with lib; {
walker.enable = true;
waybar.enable = true;
wireshark.enable = true;
wofi.enable = true;
#// wofi.enable = true;
#// wpaperd.enable = true;
})
];

View file

@ -17,7 +17,7 @@ in {
font = {
name = config.custom.font.monospace;
size = 14;
size = 13;
};
# https://sw.kovidgoyal.net/kitty/conf/
@ -33,7 +33,7 @@ in {
scrollback_lines = -1;
strip_trailing_spaces = "smart";
tab_bar_style = "powerline";
touch_scroll_multiplier = 3;
touch_scroll_multiplier = 5;
url_style = "straight";
wayland_enable_ime = "no";
window_padding_width = "2.5 5"; # top/bottom left/right

View file

@ -41,7 +41,7 @@ in {
# https://starship.rs/config/#prompt
add_newline = false;
format = concatStringsSep "" [
format = concatStrings [
# Top left
"$shell"
"$all"
@ -59,9 +59,19 @@ in {
"$character"
];
# https://starship.rs/advanced-config/#enable-right-prompt
right_format = concatStrings [
# Bottom right
];
# https://starship.rs/config/#battery
battery = {
format = " [$symbol]($style)";
charging_symbol = "󰂄";
discharging_symbol = "󰂃";
empty_symbol = "󰂎";
full_symbol = "󰁹";
unknown_symbol = "󰂑";
display = [
{
@ -204,7 +214,7 @@ in {
style = "bold #657b83";
# https://docs.rs/chrono/latest/chrono/format/strftime/index.html
time_format = "%a %b %-d %I:%M%P";
time_format = "%a %b %-d %-I:%M%P";
};
# https://starship.rs/config/#username

View file

@ -122,7 +122,7 @@ in {
src = "${pkgs.writeShellApplication {
name = "search";
text = builtins.readFile ./search.sh;
text = readFile ./search.sh;
runtimeInputs = with pkgs; [
coreutils
@ -145,7 +145,7 @@ in {
font: larger ${config.custom.font.monospace};
}
${builtins.readFile ./style.css}
${readFile ./style.css}
'';
#!! Inherit from default layout

View file

@ -7,39 +7,41 @@
}:
with lib; let
audio = config.home-manager.users.${config.custom.username}.home.file.".local/bin/audio".source;
bash = "${pkgs.bash}/bin/bash";
blueberry = "${pkgs.blueberry}/bin/blueberry";
bluetoothctl = "${pkgs.bluez}/bin/bluetoothctl";
cat = "${pkgs.coreutils}/bin/cat";
date = "${pkgs.coreutils}/bin/date";
easyeffects = "${pkgs.easyeffects}/bin/easyeffects";
echo = "${pkgs.coreutils}/bin/echo";
grep = "${pkgs.gnugrep}/bin/grep";
hyprctl = "${config.programs.hyprland.package}/bin/hyprctl";
gnome-calendar = "${pkgs.gnome-calendar}/bin/gnome-calendar";
gnome-clocks = "${pkgs.gnome-clocks}/bin/gnome-clocks";
gnome-weather = "${pkgs.gnome-weather}/bin/gnome-weather";
inhibit = config.home-manager.users.${config.custom.username}.home.file.".local/bin/inhibit".source;
jq = "${pkgs.jq}/bin/jq";
loginctl = "${pkgs.systemd}/bin/loginctl";
network = config.home-manager.users.${config.custom.username}.home.file.".local/bin/network".source;
niri = "${config.programs.niri.package}/bin/niri";
nm-connection-editor = "${pkgs.networkmanagerapplet}/bin/nm-connection-editor";
pgrep = "${pkgs.procps}/bin/pgrep";
ping = "${pkgs.iputils}/bin/ping";
pkill = "${pkgs.procps}/bin/pkill";
playerctl = "${pkgs.playerctl}/bin/playerctl";
power = config.home-manager.users.${config.custom.username}.home.file.".local/bin/power".source;
pwvucontrol = "${pkgs.pwvucontrol}/bin/pwvucontrol";
remote = config.home-manager.users.${config.custom.username}.home.file.".local/bin/remote".source;
rfkill = "${pkgs.util-linux}/bin/rfkill";
sleep = "${pkgs.coreutils}/bin/sleep";
swaync-client = "${config.home-manager.users.${config.custom.username}.services.swaync.package}/bin/swaync-client";
swayosd-client = "${pkgs.swayosd}/bin/swayosd-client";
systemctl = "${pkgs.systemd}/bin/systemctl";
systemd-inhibit = "${pkgs.systemd}/bin/systemd-inhibit";
tailscale = "${pkgs.tailscale}/bin/tailscale";
tr = "${pkgs.coreutils}/bin/tr";
virsh = "${pkgs.libvirt}/bin/virsh";
virt-manager = "${pkgs.virt-manager}/bin/virt-manager";
vpn = config.home-manager.users.${config.custom.username}.home.file.".local/bin/vpn".source;
wttrbar = "${pkgs.wttrbar}/bin/wttrbar";
cfg = config.custom.programs.waybar;
in {
options.custom.programs.waybar.enable = mkOption {default = false;};
options.custom.programs.waybar = {
enable = mkOption {default = false;};
desktop = mkOption {default = config.custom.desktops.desktop;};
};
config = mkIf cfg.enable {
age.secrets = let
@ -52,86 +54,96 @@ in {
"desktop/vm/myndows.pass" = secret "desktop/vm/myndows.pass";
};
home-manager.users.${config.custom.username} = {
home-manager.sharedModules = [
{
# https://github.com/Alexays/Waybar
# https://www.nerdfonts.com/cheat-sheet
#!! Some settings need a restart to take effect
#?? systemctl --user restart waybar
#?? pkill -SIGUSR2 -x waybar
programs.waybar = {
enable = true;
systemd.enable = true; # Start on login
systemd.enable = true;
# ?? waybar --log-level debug
# https://github.com/Alexays/Waybar/wiki/Styling
#?? GTK_DEBUG=interactive waybar
style = let
border = toString config.custom.border;
font = config.custom.font.monospace;
gap = toString config.custom.gap;
in ''
* {
border-radius: 50px;
color: #93a1a1;
font: 18px '${config.custom.font.monospace}';
font: 18px '${font}';
margin: 0;
padding: 0;
}
.horizontal > box {
border: ${border} solid #073642;
margin: 0 ${gap}px ${gap}px;
}
${readFile ./style.css}
'';
### SETTINGS ###
# https://github.com/Alexays/Waybar/wiki/Configuration
# https://docs.gtk.org/Pango/pango_markup.html#pango-markup
#?? pkill -SIGUSR2 -x waybar
# https://www.nerdfonts.com/cheat-sheet
settings = let
## INHERIT ##
# Common module settings
#!! Some settings are commonly available for use but not documented per module
common = {
# https://github.com/Alexays/Waybar/issues/1800
smooth-scrolling-threshold = 2;
on-scroll-down =
if cfg.desktop == "niri"
then "${niri} msg action focus-workspace-down"
else "";
on-scroll-up =
if cfg.desktop == "niri"
then "${niri} msg action focus-workspace-up"
else "";
};
#!! Module defaults are not accurate to documentation
# TODO: Submit pull request to fix in addition to inconsistent hyphen vs underscore
# https://github.com/Alexays/Waybar/wiki/Module:-Cava
cava-config = {
cava_config = null; # Default: null?
framerate = 30; # Default: 30?
cava =
common
// {
autosens = 1; # Default: 1
# sensitivity = 0; # Default: 100?
bars = 16; # Default: 2
lower_cutoff_freq = 50; # Default: 50?
higher_cutoff_freq = 10000; # Default: 10000?
sleep_timer = 5; # Default: 0
hide_on_silence = true; # Default: false
method = "pipewire"; # Default: pulse
source = "auto"; # Default: auto?
sample_rate = 44100; # Default: 44100?
sample_bits = 16; # Default: 16?
stereo = false; # Default: true
reverse = false; # Default: false
bar_delimiter = 32; # ASCII code for space, default: 59 or ;
monstercat = true; # Default: false?
waves = true; # Default: false?
noise_reduction = 0.2; # Default: 0.77?
input_delay = 1; # Default: 4
format-icons = [
""
""
""
""
""
""
""
""
]; # !! Required
bars = 16; # Default: 2
cava_config = null; # Default: null?
format-icons = ["" "" "" "" "" "" "" ""]; #!! Required
framerate = 30; # Default 30?
hide_on_silence = true; # Default false
higher_cutoff_freq = 10000; # Default 10000?
input_delay = 1; # Default 4
lower_cutoff_freq = 50; # Default 50?
method = "pipewire"; # Default pulse
monstercat = true; # Default false?
noise_reduction = 0.2; # Default 0.77?
on-click = easyeffects;
on-scroll-up = "${swayosd-client} --output-volume raise";
on-scroll-down = "${swayosd-client} --output-volume lower";
on-scroll-up = "${swayosd-client} --output-volume raise";
reverse = false; # Default false
rotate = 180;
sample_bits = 16; # Default 16?
sample_rate = 44100; # Default 44100?
#// sensitivity = 0; # Default 100?
sleep_timer = 5; # Default 0
source = "auto"; # Default auto?
stereo = false; # Default true
waves = true; # Default false?
};
in {
status = {
reload_style_on_change = true; # Reload CSS when modified
## GLOBAL ##
default = {
layer = "top";
position = "bottom";
reload_style_on_change = true;
## POSITION ##
modules-left = [
"custom/power"
"custom/inhibitor"
@ -140,11 +152,20 @@ in {
(mkIf config.custom.desktops.hyprland.enable "hyprland/workspaces")
(mkIf config.custom.desktops.niri.enable "niri/workspaces")
];
modules-center = [
#// "cava#forward"
"clock#date"
"clock#time"
# BUG: Padding modifiers not currently supported, so use custom module
# https://github.com/Alexays/Waybar/issues/1469 et al.
#// "clock#time"
"custom/time"
"custom/weather"
#// "cava#reverse"
];
modules-right = [
"mpris"
"tray"
@ -156,53 +177,71 @@ in {
"battery"
];
## MODULES ##
# https://github.com/Alexays/Waybar/wiki/Module:-Custom
"custom/power" = {
format = "";
on-click = "${systemctl} poweroff";
on-click-right = "${systemctl} reboot";
on-click-middle = "${loginctl} terminate-session ''";
# https://github.com/Alexays/Waybar/wiki/Module:-Battery
battery =
common
// {
format = "{icon} {power:.0f}W";
format-icons = ["󰂃" "󰁺" "󰁻" "󰁼" "󰁽" "󰁾" "󰁿" "󰂀" "󰂁" "󰂂" "󰁹"];
interval = 5; # Seconds
states = {
critical = 15; # Percent
warning = 30; # Percent
};
};
"custom/inhibitor" = {
interval = 5;
exec = "~/.config/waybar/scripts/inhibitor.sh";
on-click = inhibit;
# https://github.com/Alexays/Waybar/wiki/Module:-Bluetooth
bluetooth =
common
// {
format-connected = "󰂱";
format-disabled = "󰂲";
format-off = "󰂲";
format-on = "󰂯";
on-click = "${rfkill} toggle bluetooth";
on-click-middle = "${bluetoothctl} disconnect";
on-click-right = blueberry;
};
"custom/vm" = {
interval = 5;
exec = "~/.config/waybar/scripts/vm.sh";
on-click = ''${remote} --vm --client xfreerdp --username Myned --password "$(${cat} ${config.age.secrets."desktop/vm/myndows.pass".path})" ${
if config.custom.hidpi
then "--scale 140"
else ""
} myndows'';
# https://github.com/Alexays/Waybar/wiki/Module:-Cava
"cava#forward" = cava;
"cava#reverse" = cava // {reverse = true;};
# https://github.com/Alexays/Waybar/wiki/Module:-Clock
# https://fmt.dev/latest/syntax/#chrono-format-specifications
"clock#date" =
common
// {
format = "{:%a %b %d}";
tooltip-format = "{calendar}";
on-click-right = gnome-calendar;
calendar = {
format = {
months = "<span color='#eee8d5'>{}</span>";
weeks = "<span color='#eee8d5'>{}</span>";
weekdays = "<span color='#93a1a1'>{}</span>";
days = "<span color='#586e75'>{}</span>";
today = "<span color='#eee8d5'>{}</span>";
};
};
};
"custom/vpn" = {
interval = 5;
exec = "~/.config/waybar/scripts/vpn.sh";
on-click = "${vpn} mypi3";
};
# https://github.com/Alexays/Waybar/wiki/Module:-Idle-Inhibitor
# FIXME: Not currently usable
# https://github.com/Alexays/Waybar/issues/690
idle_inhibitor = {
format = "{icon}";
format-icons = {
activated = "󰅶";
deactivated = "󰾪";
};
"clock#time" =
common
// {
format = "<span text_transform='lowercase'>{:%-I:%M%p}</span>";
on-click = "${swaync-client} --toggle-panel";
on-click-right = gnome-clocks;
};
# https://github.com/Alexays/Waybar/wiki/Module:-Hyprland
# https://www.nerdfonts.com/cheat-sheet
"hyprland/workspaces" = {
show-special = true;
"hyprland/workspaces" =
common
// {
format = "{icon}";
format-icons = {
android = "";
dropdown = "󰞷";
@ -218,11 +257,28 @@ in {
vm = "󰢹";
wallpaper = "󰏩";
};
show-special = true;
};
# https://github.com/Alexays/Waybar/wiki/Module:-Idle-Inhibitor
# BUG: Not currently compatible with other inhibit activations
# https://github.com/Alexays/Waybar/issues/690
idle_inhibitor =
common
// {
format = "{icon}";
format-icons = {
activated = "󰅶";
deactivated = "󰾪";
};
};
# https://github.com/Alexays/Waybar/wiki/Module:-Niri
# https://www.nerdfonts.com/cheat-sheet
"niri/workspaces" = {
"niri/workspaces" =
common
// {
format = "{icon}";
format-icons = {
@ -230,127 +286,52 @@ in {
};
};
cava = cava-config;
# https://github.com/Alexays/Waybar/wiki/Module:-Clock
"clock#date" = {
format = "{:%a %b %d}";
tooltip-format = "{calendar}";
calendar.format = {
months = "<span color='#eee8d5'>{}</span>";
weeks = "<span color='#eee8d5'>{}</span>";
weekdays = "<span color='#93a1a1'>{}</span>";
days = "<span color='#586e75'>{}</span>";
today = "<span color='#eee8d5'>{}</span>";
};
};
"clock#time" = {
# https://fmt.dev/latest/syntax/#chrono-format-specifications
format = "<span text_transform='lowercase'>{:%I:%M%p}</span>";
on-click = "${swaync-client} --toggle-panel";
on-scroll-up = "${swayosd-client} --output-volume raise";
on-scroll-down = "${swayosd-client} --output-volume lower";
};
# https://github.com/bjesus/wttrbar
"custom/weather" = {
format = "{}°";
interval = 60 * 60;
return-type = "json";
exec = lib.strings.concatStringsSep " " [
"${wttrbar}"
"--ampm"
"--fahrenheit"
"--hide-conditions"
"--main-indicator temp_F"
];
};
"cava#reverse" =
cava-config
// {
reverse = true;
};
"custom/equalizer" = {
interval = 5;
on-click = audio;
exec = pkgs.writeShellScript "equalizer.sh" ''
${echo} 󰺢
${echo} "$(${cat} ~/.audio)"
${echo} "$(${cat} ~/.audio | ${tr} '[:upper:]' '[:lower:]')"
'';
};
# https://github.com/Alexays/Waybar/wiki/Module:-MPRIS
mpris = {
mpris =
common
// {
format = "{player_icon} {dynamic}";
format-paused = "{status_icon} {dynamic}";
dynamic-len = 25;
dynamic-order = [
"title"
"artist"
];
dynamic-len = 25; # Characters
dynamic-order = ["title" "artist"];
dynamic-separator = " 󰧟 ";
player-icons.default = "󰎈";
status-icons.paused = "";
on-click-middle = ""; # TODO: Close music player
on-scroll-up = "${swayosd-client} --output-volume raise";
on-scroll-down = "${swayosd-client} --output-volume lower";
};
# https://github.com/Alexays/Waybar/wiki/Module:-WirePlumber
wireplumber = {
format = "{icon} {volume}%";
format-muted = "󰸈";
format-icons = [
"󰕿"
"󰖀"
"󰕾"
];
on-click = easyeffects;
on-click-right = "${swayosd-client} --output-volume mute-toggle";
on-scroll-up = "${swayosd-client} --output-volume raise";
on-scroll-down = "${swayosd-client} --output-volume lower";
};
# TODO: on-click focus currently playing window
#// on-click = "";
# https://github.com/Alexays/Waybar/wiki/Module:-Bluetooth
bluetooth = {
format-disabled = "󰂲";
format-off = "󰂲";
format-on = "󰂯";
format-connected = "󰂱";
on-click = blueberry;
on-click-right = "${bluetoothctl} disconnect";
on-click-middle = "${rfkill} toggle bluetooth"; # Toggle bluetooth on/off
on-click-middle =
if cfg.desktop == "niri"
then ''${niri} msg action close-window --id "$(${niri} msg -j windows | ${jq} '.[] | select(.app_id == "YouTube Music").id')"''
else "";
on-scroll-down = "${swayosd-client} --output-volume lower";
on-scroll-up = "${swayosd-client} --output-volume raise";
};
# https://github.com/Alexays/Waybar/wiki/Module:-Network
network = {
network =
common
// {
format = "{icon}";
format-icons = {
disabled = "";
disconnected = "";
ethernet = "󰈀";
linked = "";
wifi = [
"󰤯"
"󰤟"
"󰤢"
"󰤥"
"󰤨"
];
wifi = ["󰤯" "󰤟" "󰤢" "󰤥" "󰤨"];
};
on-click = nm-connection-editor;
on-click-right = network; # Toggle networking on/off
on-click = network;
on-click-right = nm-connection-editor;
};
# https://github.com/Alexays/Waybar/wiki/Module:-PowerProfilesDaemon
power-profiles-daemon = {
power-profiles-daemon =
common
// {
format = "{icon}";
format-icons = {
@ -363,48 +344,38 @@ in {
tooltip = false;
};
# https://github.com/Alexays/Waybar/wiki/Module:-Battery
"battery" = {
format = "{icon} {power:.0f}W";
interval = 5;
format-icons = [
"󰂃"
"󰁺"
"󰁻"
"󰁼"
"󰁽"
"󰁾"
"󰁿"
"󰂀"
"󰂁"
"󰂂"
"󰁹"
];
states = {
critical = 15;
warning = 30;
# https://github.com/Alexays/Waybar/wiki/Module:-WirePlumber
wireplumber =
common
// {
format = "{icon} {volume}%";
format-icons = ["󰕿" "󰖀" "󰕾"];
format-muted = "󰸈";
on-click = "${swayosd-client} --output-volume mute-toggle";
on-click-right = pwvucontrol;
on-scroll-down = "${swayosd-client} --output-volume lower";
on-scroll-up = "${swayosd-client} --output-volume raise";
};
on-click = power;
};
};
};
# https://github.com/Alexays/Waybar/wiki/Module:-Custom
"custom/equalizer" =
common
// {
exec = pkgs.writeShellScript "equalizer.sh" ''
${echo} 󰺢
${echo} "$(${cat} ~/.audio)"
${echo} "$(${cat} ~/.audio | ${tr} '[:upper:]' '[:lower:]')"
'';
interval = 5; # Seconds
on-click = audio;
on-click-right = easyeffects;
};
# TODO: Convert to writeShellApplication
### SCRIPTS ###
#?? text
#?? tooltip
#?? class
xdg.configFile = {
# Return inhibit idle status
"waybar/scripts/inhibitor.sh" = {
executable = true;
text = ''
#! /usr/bin/env ${bash}
"custom/inhibitor" =
common
// {
exec = pkgs.writeShellScript "inhibitor.sh" ''
if ${pgrep} systemd-inhibit &> /dev/null; then
${echo} 󰅶
${echo} Enabled
@ -415,15 +386,34 @@ in {
${echo} disabled
fi
'';
interval = 5; # Seconds
on-click = inhibit;
};
# Return tailscale status
"waybar/scripts/vm.sh" = {
executable = true;
text = ''
#! /usr/bin/env ${bash}
"custom/power" =
common
// {
format = "";
on-click = "${systemctl} poweroff";
on-click-middle = "${loginctl} terminate-session ${config.custom.username}";
on-click-right = "${systemctl} reboot";
};
case "$(virsh domstate myndows)" in
"custom/time" =
common
// {
exec = "${date} '+%-I:%M%P'";
interval = 60; # Seconds
on-click = "${swaync-client} --toggle-panel";
on-click-right = gnome-clocks;
};
"custom/vm" =
common
// {
exec = pkgs.writeShellScript "vm.sh" ''
case "$(${virsh} domstate myndows)" in
'running')
${echo}
${echo} Online
@ -442,14 +432,23 @@ in {
${echo} unknown;;
esac
'';
interval = 5;
on-click = ''${remote} --vm --client xfreerdp --username Myned --password "$(${cat} ${config.age.secrets."desktop/vm/myndows.pass".path})" ${
if config.custom.hidpi
then "--scale 140"
else ""
} myndows'';
on-click-middle = "${virsh} shutdown myndows";
on-click-right = virt-manager;
};
# Return tailscale status
"waybar/scripts/vpn.sh" = {
executable = true;
text = ''
#! /usr/bin/env ${bash}
"custom/vpn" =
common
// {
exec = pkgs.writeShellScript "vpn.sh" ''
if [[ $(${tailscale} status --json | ${jq} .ExitNodeStatus.Online) == 'true' ]]; then
${echo} 󰖂
${echo} Connected
@ -460,8 +459,32 @@ in {
${echo} disconnected
fi
'';
interval = 5; # Seconds
on-click = "${vpn} mypi3";
};
# https://github.com/bjesus/wttrbar
"custom/weather" =
common
// {
exec = lib.strings.concatStringsSep " " [
wttrbar
"--ampm"
"--fahrenheit"
"--hide-conditions"
"--main-indicator temp_F"
];
format = "{}°";
interval = 60 * 60; # Seconds
return-type = "json";
on-click-right = gnome-weather;
};
};
};
};
}
];
};
}

View file

@ -42,7 +42,6 @@ tooltip label {
.horizontal > box {
background: #002b36;
/* border: 2px #586e75 solid; */
padding: 4px;
}

View file

@ -26,7 +26,7 @@ in {
-- # TODO: Remove when using Wayland
config.font_size = ${toString (14 * config.custom.scale)}
${builtins.readFile ./config.lua}
${readFile ./config.lua}
return config
'';

View file

@ -25,7 +25,7 @@ in {
#// excludeShellChecks = ["SC2154"]; # argc evaluates variables at runtime
runtimeInputs = dependencies;
text = builtins.readFile ./${name}.sh;
text = readFile ./${name}.sh;
}
+ "/bin/${name}";
};
@ -38,7 +38,7 @@ in {
pkgs.writers.writePython3Bin name {libraries = dependencies;}
# Disable linting
# https://flake8.pycqa.org/en/3.1.1/user/ignoring-errors.html#ignoring-entire-files
("# flake8: noqa\n" + builtins.readFile ./${name}.py)
("# flake8: noqa\n" + readFile ./${name}.py)
+ "/bin/${name}";
};
in

View file

@ -12,26 +12,51 @@ in {
# https://github.com/ErikReider/SwayNotificationCenter
services.swaync = {
enable = true;
style = ./style.css;
# https://github.com/ErikReider/SwayNotificationCenter/blob/main/data/style/style.scss
style = let
border = toString config.custom.border;
gap = toString config.custom.gap;
in ''
.control-center {
border: ${border} solid #073642;
margin: ${gap}px;
}
.notification.low {
border: ${border} solid #6c71c4;
}
.notification.normal {
border: ${border} solid #d33682;
}
.notification.critical {
border: ${border} solid #dc322f;
}
${readFile ./style.css}
'';
# https://github.com/ErikReider/SwayNotificationCenter/blob/main/src/configSchema.json
settings = {
control-center-width = 750 / config.custom.scale;
control-center-height = config.custom.height / 2;
control-center-height = builtins.floor (config.custom.height / 2);
control-center-positionY = "bottom";
control-center-width = builtins.floor (1000 / config.custom.scale);
fit-to-screen = false;
hide-on-clear = true;
notification-2fa-action = false;
notification-icon-size = 32;
#// notification-inline-replies = true;
notification-window-width = builtins.floor (750 / config.custom.scale);
positionX = "center";
positionY = "top";
timeout-low = 5;
timeout = 5; # normal
timeout-critical = 0;
timeout-low = 5;
widgets = [
"notifications"
"backlight"
"inhibitors"
"dnd"
"title"

View file

@ -5,7 +5,6 @@ https://github.com/ErikReider/SwayNotificationCenter/blob/main/data/style/style.
***/
@define-color cc-bg #002b36;
@define-color noti-border-color #073642;
@define-color noti-bg #002b36;
@define-color noti-bg-opaque #002b36;
@ -13,24 +12,29 @@ https://github.com/ErikReider/SwayNotificationCenter/blob/main/data/style/style.
@define-color noti-bg-hover #073642;
@define-color noti-bg-hover-opaque #073642;
@define-color noti-bg-focus #002b36;
@define-color text-color #93a1a1;
@define-color text-color-disabled #586e75;
.notification.low {
border: 2px solid #6c71c4;
.control-center {
padding: 16px;
}
.notification.normal {
border: 2px solid #d33682;
}
.notification.critical {
border: 2px solid #dc322f;
.control-center .notification {
box-shadow: none;
}
.notification-content {
padding: 16px;
padding: 12px;
}
.notification-content .app-icon,
.notification-content .image {
margin: 0 8px 0 0;
}
.notification-group-buttons,
.notification-group-headers {
margin: 0;
}
.text-box .summary,
@ -41,13 +45,3 @@ https://github.com/ErikReider/SwayNotificationCenter/blob/main/data/style/style.
.text-box .body {
font-size: 16px;
}
.control-center {
/* border: 2px solid #073642; */
margin: 10px; /* Gap size */
padding: 16px;
}
.control-center .notification {
box-shadow: none;
}

View file

@ -119,7 +119,10 @@ in {
workspaces-only-on-primary = mkBoolean true;
#?? [as]
experimental-features = mkArray type.string ["variable-refresh-rate"];
experimental-features = mkArray type.string [
"scale-monitor-framebuffer" # https://wiki.archlinux.org/title/HiDPI#Fractional_scaling
"variable-refresh-rate" # https://wiki.archlinux.org/title/Variable_refresh_rate#GNOME
];
};
"org/gnome/mutter/wayland/keybindings" = {

View file

@ -17,13 +17,15 @@ in {
package = pkgs.google-cursor;
};
gtk = {
gtk = let
css = readFile ./style.css;
in {
enable = true;
gtk3.extraCss = builtins.readFile ./style.css;
gtk3.extraCss = css;
gtk4 = {
extraConfig.gtk-hint-font-metrics = 1; # Fix blurry fonts
extraCss = builtins.readFile ./style.css;
extraCss = css;
};
font = {

View file

@ -97,12 +97,14 @@ in {
gnome-calendar # Calendar
gnome-clocks # Clock
gnome-connections # Remote desktop client
gnome-contacts # Contact editor
gnome-disk-utility # Disk formatter
gnome-firmware # Firmware updater
gnome-font-viewer # Font viewer
gnome-graphs # Data plotter
gnome-maps # OpenStreetMap client
gnome-obfuscate # Image redacter
gnome-online-accounts-gtk # GNOME accounts
gnome-podcasts # Podcast feed
gnome-resources # System monitor
gnome-software # Flatpak manager