jaci tweaks rewrite for framework laptop, tweak framework12 config

This commit is contained in:
Nathan Anderson 2026-02-10 20:37:27 -07:00
parent 964e4a63b3
commit a0ff06bf8c
14 changed files with 1397 additions and 313 deletions

View File

@ -89,13 +89,14 @@
inherit inputs outputs timeZone system; inherit inputs outputs timeZone system;
}; };
modules = [ modules = [
stylix.nixosModules.stylix
# Setup home manager # Setup home manager
inputs.home-manager.nixosModules.home-manager { inputs.home-manager.nixosModules.home-manager {
home-manager.useGlobalPkgs = true; home-manager.useGlobalPkgs = true;
home-manager.useUserPackages = true; home-manager.useUserPackages = true;
home-manager.users.jaci = import ./jaci/modules/home-manager/home.nix; home-manager.users.jaci = import ./jaci/modules/home-manager/home.nix;
home-manager.extraSpecialArgs = { home-manager.extraSpecialArgs = {
inherit inputs outputs; inherit inputs outputs unstablePkgs;
}; };
} }
./jaci/default.nix ./jaci/default.nix

View File

@ -54,10 +54,10 @@
name = "Noto Color Emoji"; name = "Noto Color Emoji";
}; };
sizes = { sizes = {
applications = 12; applications = 14;
desktop = 10; desktop = 12;
popups = 10; popups = 12;
terminal = 11; terminal = 16;
}; };
}; };

View File

@ -4,11 +4,12 @@
fullName = "Jaci Anderson"; fullName = "Jaci Anderson";
email = "jaci.s.anderson@gmail.com"; email = "jaci.s.anderson@gmail.com";
hostName = "meowyxlife"; hostName = "meowyxlife";
desktop = "kde"; desktop = "niri";
gaming = true; gaming = true;
in in
{ {
imports = [ imports = [
inputs.nixos-hardware.nixosModules.framework-12-13th-gen-intel
./desktop-configuration.nix ./desktop-configuration.nix
./nixos/hardware-configuration.nix ./nixos/hardware-configuration.nix
]; ];
@ -20,6 +21,51 @@
installGaming = gaming; installGaming = gaming;
}; };
# Stylix theming - auto-generated light theme from wallpaper
stylix = {
enable = true;
image = ./kiki_background.jpg;
# Auto-generate color scheme from wallpaper
polarity = "light";
# System-wide cursor
cursor = {
package = pkgs.bibata-cursors;
name = "Bibata-Modern-Classic";
size = 32;
};
# Fonts
fonts = {
serif = {
package = pkgs.lato;
name = "Lato";
};
sansSerif = {
package = pkgs.lato;
name = "Lato";
};
monospace = {
package = pkgs.maple-mono.NF;
name = "Maple Mono NF";
};
emoji = {
package = pkgs.noto-fonts-color-emoji;
name = "Noto Color Emoji";
};
sizes = {
applications = 12;
desktop = 10;
popups = 10;
terminal = 11;
};
};
# Disable plymouth styling (use default)
targets.plymouth.enable = false;
};
# Limit the number of generations to keep # Limit the number of generations to keep
boot.loader.systemd-boot.configurationLimit = 5; boot.loader.systemd-boot.configurationLimit = 5;

View File

@ -1,37 +1,47 @@
{ config, lib, inputs, outputs, pkgs, timeZone, system, ... }: {
config,
lib,
inputs,
outputs,
pkgs,
timeZone,
system,
...
}:
let let
supportedDesktops = [ "kde" ]; supportedDesktops = [ "niri" ];
supportedDesktopsStr = lib.strings.concatStringsSep ", " supportedDesktops; supportedDesktopsStr = lib.strings.concatStringsSep ", " supportedDesktops;
deskCfg = config.deskCfg; deskCfg = config.deskCfg;
in in
{ {
options.deskCfg = { options.deskCfg = {
de = lib.mkOption { de = lib.mkOption {
default = "kde"; default = "niri";
type = lib.types.str; type = lib.types.str;
description = "Desktop Environment"; description = "Desktop Environment";
}; };
userName = lib.mkOption { userName = lib.mkOption {
type = lib.types.str; type = lib.types.str;
description = "Main username for system"; description = "Main username for system";
}; };
hostName = lib.mkOption { hostName = lib.mkOption {
type = lib.types.str; type = lib.types.str;
description = "Hostname for system"; description = "Hostname for system";
}; };
installGaming = lib.mkOption { installGaming = lib.mkOption {
type = lib.types.bool; type = lib.types.bool;
default = true; default = true;
description = "Whether to install gaming software or not"; description = "Whether to install gaming software or not";
}; };
}; };
imports = [ imports = [
modules/user/main_user.nix modules/user/main_user.nix
modules/labwc/labwc_conf.nix modules/niri/niri_conf.nix
]; ../shared/modules/system/power_manager.nix
];
config = { config = {
assertions = [ assertions = [
{ {
assertion = builtins.elem deskCfg.de supportedDesktops; assertion = builtins.elem deskCfg.de supportedDesktops;
@ -43,52 +53,84 @@ in
inputs.nur.overlays.default inputs.nur.overlays.default
]; ];
# Intel graphics acceleration (Framework 12)
hardware.graphics.enable = true;
hardware.enableRedistributableFirmware = true;
# Enable flakes feature # Enable flakes feature
nix.settings.experimental-features = [ nix.settings.experimental-features = [
"nix-command" "flakes" "nix-command"
"flakes"
]; ];
nixpkgs.config.allowUnfree = true;
# Use the systemd-boot EFI boot loader. boot = {
boot.loader.systemd-boot.enable = true; # Enable "Silent Boot"
boot.loader.efi.canTouchEfiVariables = true; consoleLogLevel = 0;
# boot.plymouth.enable = true; initrd.verbose = false;
kernelParams = [
"quiet"
"splash"
"boot.shell_on_fail"
"loglevel=3"
"rd.systemd.show_status=false"
"rd.udev.log_level=3"
"udev.log_priority=3"
];
# Hide the OS choice for bootloaders.
loader.timeout = 0;
# Use the systemd-boot EFI boot loader.
loader.systemd-boot.enable = true;
loader.efi.canTouchEfiVariables = true;
# Use latest kernel packages
kernelPackages = pkgs.linuxPackages_latest;
};
networking.hostName = deskCfg.hostName; # Define your hostname. networking.hostName = deskCfg.hostName;
networking.networkmanager.enable = true; # Easiest to use and most distros use this by default. networking.networkmanager.enable = true;
networking.wireless.iwd.enable = true;
time.timeZone = timeZone; time.timeZone = timeZone;
main_user = {
users.users.${deskCfg.userName} = { enable = true;
isNormalUser = true; userName = deskCfg.userName;
initialPassword = "password"; isDesktopUser = true;
description = "main user";
shell = pkgs.zsh;
extraGroups = [
"wheel"
"networkmanager"
"corectrl"
deskCfg.userName
"video"
"audio"
];
};
# main_user = {
# enable = true;
# userName = deskCfg.userName;
# isDesktopUser = true;
# };
labwc = {
enable = true;
useNonFree = true;
installGaming = deskCfg.installGaming;
systemPackages = with pkgs; [
libreoffice
];
}; };
system.stateVersion = "23.11"; # Did you read the comment? power_manager = {
enable = true;
};
niriwm = {
enable = true;
useNonFree = true;
user = deskCfg.userName;
installGaming = deskCfg.installGaming;
systemPackages = with pkgs; [
libreoffice
];
};
environment.systemPackages = with pkgs; [
cryptsetup
];
programs.niri.enable = true;
# For electron apps in wayland
environment.sessionVariables.NIXOS_OZONE_WL = "1";
services.greetd = {
enable = true;
settings = rec {
initial_session = {
command = "${pkgs.niri}/bin/niri-session";
user = deskCfg.userName;
};
default_session = initial_session;
};
};
system.stateVersion = "23.11";
}; };
} }

BIN
jaci/kiki_background.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 162 KiB

View File

@ -0,0 +1,417 @@
//
// MISCELLANEOUS
//
// gui startup
spawn-at-startup "waybar"
spawn-at-startup "keepassxc"
// shell startup
spawn-sh-at-startup "kanshi"
spawn-sh-at-startup "sleep 5 && nm-applet --indicator"
spawn-sh-at-startup "sleep 5 && syncthingtray --wait"
spawn-sh-at-startup "sleep 5 && swaync"
screenshot-path null // save screenshots just to clipboard
prefer-no-csd // (Client Side Decorations) ask clients to not add their own decorations
hotkey-overlay {
skip-at-startup
}
//
// OUTPUTS
//
output "eDP-1"{
scale 1.0
variable-refresh-rate
transform "normal"
}
workspace "term"
workspace "net"
workspace "chat"
workspace "scratch"
//
// INPUTS
//
input {
keyboard {
xkb {
layout "us"
}
repeat-delay 175
repeat-rate 50
}
touchpad {
tap
dwt
dwtp
natural-scroll
accel-speed 0.2
accel-profile "adaptive"
}
mouse {
accel-speed 0.2
accel-profile "adaptive"
}
trackpoint {
accel-speed 0.2
accel-profile "adaptive"
}
tablet {
map-to-output "eDP-1"
}
touch {
map-to-output "eDP-1"
}
disable-power-key-handling
warp-mouse-to-focus mode="center-xy"
focus-follows-mouse
}
//
// LAYOUT
//
layout {
gaps 2
center-focused-column "on-overflow"
always-center-single-column
default-column-display "normal"
tab-indicator {
hide-when-single-tab
}
preset-column-widths {
proportion 0.33333
proportion 0.5
proportion 0.66667
}
default-column-width {
proportion 0.5;
}
focus-ring {
width 0
}
border {
active-gradient from="#8ac926" to="#6a994e" angle=45 in="oklch longer hue" relative-to="workspace-view"
inactive-gradient from="#606c38" to="#344e41" angle=45 in="oklch longer hue" relative-to="workspace-view"
}
shadow {
softness 30
spread 5
offset x=8 y=8
draw-behind-window true
color "#00444444"
}
struts {
left 10
right 10
top 10
bottom 10
}
}
//
// WINDOW RULES
//
// All windows - corner radius, opacity
window-rule {
geometry-corner-radius 14 14 0 14
clip-to-geometry true
}
window-rule {
match is-active=true
opacity 0.99
}
window-rule {
match is-floating=true
opacity 0.92
}
// Term windows
window-rule {
match app-id="com.mitchellh.ghostty"
default-column-width { proportion 0.5; }
open-on-workspace "term"
}
// Net windows
window-rule {
match app-id="firefox"
default-column-width { proportion 1.0; }
open-on-workspace "net"
}
// Chat windows
window-rule {
match app-id=r#"^com\.discordapp\.Discord$"#
match app-id=r#"^org\.signal\.Signal$"#
default-column-width { proportion 0.8; }
block-out-from "screencast"
open-on-workspace "chat"
}
// Scratch windows (exclude unlock dialog so it can open on net)
window-rule {
match app-id=r#"^org\.keepassxc\.KeePassXC$"#
exclude app-id=r#"^org\.keepassxc\.KeePassXC$"# title="^Unlock Database - KeePassXC$"
block-out-from "screencast"
open-on-workspace "scratch"
}
// Keepass unlock dialog on Net workspace
window-rule {
match app-id=r#"^org\.keepassxc\.KeePassXC$"# title="^Unlock Database - KeePassXC$"
open-floating true
open-focused true
open-on-workspace "net"
}
// File browser
window-rule {
match app-id="org.gnome.Nautilus"
open-floating true
open-focused true
block-out-from "screencast"
}
// Steam windows
window-rule {
match app-id="steam" title="Friends List"
open-floating true
open-focused false
}
// Bright border on screen-shared windows
window-rule {
match is-window-cast-target=true
focus-ring {
active-color "#f38ba8"
inactive-color "#7d0d2d"
}
border {
inactive-color "#7d0d2d"
}
shadow {
color "#7d0d2d70"
}
tab-indicator {
active-color "#f38ba8"
inactive-color "#7d0d2d"
}
}
// Block out notifications from screencasts.
layer-rule {
match namespace="^notifications$"
block-out-from "screencast"
}
//
// BINDS (QWERTY Layout)
//
binds {
Mod+Shift+Slash { show-hotkey-overlay; }
// Terminal
Mod+Return { spawn "ghostty"; }
// Application launcher - nwg-drawer
Mod+D { spawn "nwg-drawer"; }
// File manager
Mod+T { spawn "nautilus"; }
// Browser
Mod+W { spawn "firefox"; }
// Close window
Mod+Q { close-window; }
// QWERTY navigation (H=left, J=down, K=up, L=right)
Mod+H { focus-column-left; }
Mod+J { focus-window-down; }
Mod+K { focus-window-up; }
Mod+L { focus-column-right; }
// Arrow keys for focus movement
Mod+Left { focus-column-left; }
Mod+Down { focus-window-down; }
Mod+Up { focus-window-up; }
Mod+Right { focus-column-right; }
// QWERTY window movement
Mod+Shift+H { move-column-left; }
Mod+Shift+J { move-window-down; }
Mod+Shift+K { move-window-up; }
Mod+Shift+L { move-column-right; }
// Arrow keys for window movement
Mod+Shift+Left { move-column-left; }
Mod+Shift+Down { move-window-down; }
Mod+Shift+Up { move-window-up; }
Mod+Shift+Right { move-column-right; }
Mod+Home { focus-column-first; }
Mod+End { focus-column-last; }
Mod+Ctrl+Home { move-column-to-first; }
Mod+Ctrl+End { move-column-to-last; }
// Monitor focus - QWERTY
Mod+Ctrl+H { focus-monitor-left; }
Mod+Ctrl+J { focus-monitor-down; }
Mod+Ctrl+K { focus-monitor-up; }
Mod+Ctrl+L { focus-monitor-right; }
// Monitor focus - Arrow keys
Mod+Ctrl+Left { focus-monitor-left; }
Mod+Ctrl+Down { focus-monitor-down; }
Mod+Ctrl+Up { focus-monitor-up; }
Mod+Ctrl+Right { focus-monitor-right; }
// Move column to monitor - QWERTY
Mod+Shift+Ctrl+H { move-column-to-monitor-left; }
Mod+Shift+Ctrl+J { move-column-to-monitor-down; }
Mod+Shift+Ctrl+K { move-column-to-monitor-up; }
Mod+Shift+Ctrl+L { move-column-to-monitor-right; }
// Move column to monitor - Arrow keys
Mod+Shift+Ctrl+Left { move-column-to-monitor-left; }
Mod+Shift+Ctrl+Down { move-column-to-monitor-down; }
Mod+Shift+Ctrl+Up { move-column-to-monitor-up; }
Mod+Shift+Ctrl+Right { move-column-to-monitor-right; }
// Workspace navigation
Mod+Page_Down { focus-workspace-down; }
Mod+Page_Up { focus-workspace-up; }
Mod+Ctrl+Page_Down { move-column-to-workspace-down; }
Mod+Ctrl+Page_Up { move-column-to-workspace-up; }
Mod+Shift+Page_Down { move-workspace-down; }
Mod+Shift+Page_Up { move-workspace-up; }
Mod+Minus { focus-workspace "scratch"; }
Mod+1 { focus-workspace "term"; }
Mod+2 { focus-workspace "net"; }
Mod+3 { focus-workspace "chat"; }
Mod+4 { focus-workspace 4; }
Mod+5 { focus-workspace 5; }
Mod+6 { focus-workspace 6; }
Mod+7 { focus-workspace 7; }
Mod+8 { focus-workspace 8; }
Mod+9 { focus-workspace 9; }
Mod+Shift+Minus { move-column-to-workspace "scratch"; }
Mod+Shift+1 { move-column-to-workspace "term"; }
Mod+Shift+2 { move-column-to-workspace "net"; }
Mod+Shift+3 { move-column-to-workspace "chat"; }
Mod+Shift+4 { move-column-to-workspace 4; }
Mod+Shift+5 { move-column-to-workspace 5; }
Mod+Shift+6 { move-column-to-workspace 6; }
Mod+Shift+7 { move-column-to-workspace 7; }
Mod+Shift+8 { move-column-to-workspace 8; }
Mod+Shift+9 { move-column-to-workspace 9; }
Mod+Comma { consume-window-into-column; }
Mod+Period { expel-window-from-column; }
Mod+R { switch-preset-column-width; }
Mod+Shift+R { reset-window-height; }
// Fullscreen
Mod+F { fullscreen-window; }
Mod+Shift+F { maximize-column; }
// Floating toggle
Mod+Space { toggle-window-floating; }
Mod+Shift+Space { switch-focus-between-floating-and-tiling; }
Mod+C { center-column; }
Mod+bracketleft { set-column-width "-10%"; }
Mod+bracketright { set-column-width "+10%"; }
Mod+Shift+bracketleft { set-window-height "-10%"; }
Mod+Shift+bracketright { set-window-height "+10%"; }
//
// Utilities
//
// Notifications
Mod+Shift+C { spawn-sh "swaync-client --toggle-panel"; }
// Screenshots
Mod+P { screenshot; }
Mod+Shift+P { screenshot-screen; }
// Traditional screenshot keys
Print { screenshot; }
Ctrl+Print { screenshot-screen; }
Alt+Print { screenshot-window; }
// Volume control (via swayosd)
XF86AudioRaiseVolume allow-when-locked=true { spawn "swayosd-client" "--output-volume" "raise"; }
XF86AudioLowerVolume allow-when-locked=true { spawn "swayosd-client" "--output-volume" "lower"; }
XF86AudioMute allow-when-locked=true { spawn "swayosd-client" "--output-volume" "mute-toggle"; }
XF86AudioMicMute allow-when-locked=true { spawn "swayosd-client" "--input-volume" "mute-toggle"; }
// Caps Lock indicator (via swayosd)
Caps_Lock { spawn "swayosd-client" "--caps-lock"; }
// Media control
XF86AudioPlay { spawn "playerctl" "play-pause"; }
XF86AudioPause { spawn "playerctl" "pause"; }
XF86AudioNext { spawn "playerctl" "next"; }
XF86AudioPrev { spawn "playerctl" "previous"; }
XF86AudioStop { spawn "playerctl" "stop"; }
// Brightness control (via swayosd)
XF86MonBrightnessUp { spawn "swayosd-client" "--brightness" "raise"; }
XF86MonBrightnessDown { spawn "swayosd-client" "--brightness" "lower"; }
// Screen rotation
Mod+Alt+Up { spawn "niri" "msg" "output" "eDP-1" "transform" "normal"; }
Mod+Alt+Right { spawn "niri" "msg" "output" "eDP-1" "transform" "90"; }
Mod+Alt+Down { spawn "niri" "msg" "output" "eDP-1" "transform" "180"; }
Mod+Alt+Left { spawn "niri" "msg" "output" "eDP-1" "transform" "270"; }
Mod+Shift+Q { quit; }
Mod+Shift+Ctrl+P { power-off-monitors; }
Mod+Shift+Ctrl+T { toggle-debug-tint; }
}
switch-events {
lid-close { spawn "systemctl" "suspend"; }
lid-open { spawn "notify-send" "The laptop lid is open!"; }
}

View File

@ -1,70 +1,145 @@
{ inputs, outputs, lib, config, pkgs, ... }: { inputs, config, pkgs, lib, unstablePkgs, ... }:
let let
userName = "jaci"; userName = "jaci";
fullName = "Jaci Anderson"; fullName = "Jaci Anderson";
email = "jaci.s.anderson@gmail.com"; email = "jaci.s.anderson@gmail.com";
in in
{ {
# nixpkgs.overlays = [
# inputs.nur.overlay
# ];
# nixpkgs.config.allowUnfree = true;
# inputs.nixpkgs-stable.config.allowUnfree = true;
imports = [ imports = [
../../../shared/modules/apps/firefox/firefox.nix ../../../shared/modules/apps/firefox/firefox.nix
../../../shared/modules/home-manager/git-autosync.nix
../niri/niri_home.nix
./programs.nix
]; ];
home.username = userName; home.username = userName;
home.homeDirectory = "/home/${userName}"; home.homeDirectory = "/home/${userName}";
programs.home-manager.enable = true; programs.home-manager.enable = true;
home.stateVersion = "23.11"; # Please read the comment before changing. home.stateVersion = "23.11"; # Please read the comment before changing.
# The home.packages option allows you to install Nix packages into your
# environment.
firefoxApp.enable = true; firefoxApp.enable = true;
fonts.fontconfig.enable = true; fonts.fontconfig.enable = true;
home.packages = with pkgs; [
helix
# Stylix auto-theming - applies to all programs.<name>.enable apps
stylix.autoEnable = true;
# Enable niri home configuration
nirihome = {
enable = true;
homePackages = [ ];
};
# Additional user packages
# Note: Programs with Stylix theming are in programs.nix
home.packages = with pkgs; [
#
# Dev Tools
#
jq
python3
unstablePkgs.claude-code
unstablePkgs.opencode
### LSP's
nil
nodePackages_latest.bash-language-server
vscode-langservers-extracted # provides eslint, markdown, json, css, html lsp
python313Packages.python-lsp-server
#
# Gaming
#
mangohud mangohud
wine-wayland wine-wayland
webcord webcord
mumble mumble
bat #
# Unix tools
#
duf duf
dust
fd fd
fzf
lsd lsd
ripgrep ripgrep
tre-command tre-command
gtop gtop
htop
neofetch
unzip
gnupg
pinentry-tty
#
# Photo / Video
#
imv imv
mpv ffmpeg
yt-dlp
gimp gimp
# Install fonts #
nerd-fonts.hurmit # Other
# TODO need to add gohu font #
keepassxc
#
# Style # Style
catppuccin-kvantum #
libsForQt5.qtstyleplugin-kvantum libsForQt5.qtstyleplugin-kvantum
libsForQt5.qt5ct libsForQt5.qt5ct
# Additional fonts (main fonts managed by Stylix)
unstablePkgs.nerd-fonts.hurmit
unstablePkgs.nerd-fonts.overpass
recursive
]; ];
home.file."${config.xdg.configHome}" = { #
source = ../../dotfiles; # Dotfiles
recursive = true; #
# Static symlinks
home.file = lib.mkMerge [
# Shared dotfiles
(let
sharedDotfilesPath = ../../../shared/dotfiles;
in
if builtins.pathExists sharedDotfilesPath then
builtins.listToAttrs (map (name: {
name = "${config.xdg.configHome}/${name}";
value = { source = lib.mkDefault (sharedDotfilesPath + "/${name}"); };
}) (builtins.attrNames (builtins.readDir sharedDotfilesPath)))
else {})
# Add local dotfiles, overriding from local over shared
(let
localDotfilesPath = ../../dotfiles;
in
if builtins.pathExists localDotfilesPath && builtins.readDir localDotfilesPath != {} then
builtins.listToAttrs (map (name: {
name = "${config.xdg.configHome}/${name}";
value = { source = localDotfilesPath + "/${name}"; };
}) (builtins.attrNames (builtins.readDir localDotfilesPath)))
else {})
];
# Active symlinks for live-edited config
xdg.configFile = {
"niri".source = config.lib.file.mkOutOfStoreSymlink "/home/${userName}/nixos/jaci/linked-dotfiles/niri";
}; };
# Override Flatpak Steam to disable GPU acceleration (fixes black window on Niri)
xdg.desktopEntries."com.valvesoftware.Steam" = {
name = "Steam";
exec = "flatpak run com.valvesoftware.Steam -cef-disable-gpu %U";
icon = "steam";
terminal = false;
categories = [ "Game" ];
mimeType = [ "x-scheme-handler/steam" "x-scheme-handler/steamlink" ];
};
home.sessionVariables = { home.sessionVariables = {
EDITOR = "hx"; EDITOR = "hx";
# For electron apps
NIXOS_OZONE_WL = "1";
}; };
# Git setup # Git setup
@ -73,11 +148,31 @@
settings = { settings = {
user.name = fullName; user.name = fullName;
user.email = email; user.email = email;
init.defaultBranch = "main"; init = { defaultBranch = "main"; };
pull.ff = "only"; pull = { ff = "only"; };
merge = { conflictStyle = "zdiff3"; };
push = { autoSetupRemote = "true"; };
}; };
}; };
programs = {
direnv = {
enable = true;
enableZshIntegration = true;
nix-direnv.enable = true;
};
bash.enable = true;
delta = {
enable = true;
enableGitIntegration = true;
};
};
# enable saving ssh secrets (needed for private repos)
services.gnome-keyring.enable = true;
services.gnome-keyring.components = [ "ssh" "secrets" ];
# Zsh setup # Zsh setup
programs.zsh = { programs.zsh = {
enable = true; enable = true;
@ -87,36 +182,79 @@
theme = "half-life"; theme = "half-life";
}; };
initContent = '' initContent = ''
# History
HISTSIZE=10000
SAVEHIST=10000
setopt SHARE_HISTORY
setopt APPEND_HISTORY
# integrate ssh-agent from gnome keyring
export SSH_AUTH_SOCK=/run/user/$UID/gcr/ssh
eval "$(direnv hook zsh)"
yt-audio() {
nix-shell -p yt-dlp --run "yt-dlp -x $1 --audio-format mp3"
}
# Better Unix Aliases
alias ls="lsd"
alias l="lsd --almost-all --long"
alias llm="lsd --timesort --long"
alias lS="lsd --oneline --classic"
alias lt="lsd --tree --depth=2"
alias grep="rg"
alias cat="bat --paging=never"
alias rm="rm -i"
''; '';
profileExtra = ''
export XDG_DATA_DIRS=$XDG_DATA_DIRS:/usr/share:/var/lib/flatpak/exports/share:$HOME/.local/share/flatpak/exports/share
'';
syntaxHighlighting = {
enable = true;
};
}; };
# Stylix handles Qt and GTK theming
# services.wlsunset = {
# Theming qt and gnome apps enable = true;
# sunrise = "07:00";
qt = { sunset = "17:00";
enable = true; temperature.night = 3500;
platformTheme.name = "qtct"; };
style.name = "kvantum";
services.kdeconnect = {
enable = true;
indicator = true;
};
# Enable bluetooth headphone controls
services.mpris-proxy.enable = true;
# SwayOSD - on-screen display for volume, brightness, caps lock
services.swayosd = {
enable = true;
topMargin = 0.9;
};
# SwayNC - notification center (Stylix auto-themes this)
services.swaync = {
enable = true;
settings = {
positionX = "center";
positionY = "top";
notification-window-width = 800;
}; };
gtk = { };
enable = true;
cursorTheme = { # Git autosync for Documents
package = pkgs.catppuccin-cursors.latteLavender; services.git-autosync = {
name = "Catppuccin-Latte-Lavender-Cursors"; enable = true;
}; repos.documents = {
iconTheme = { path = "/home/${userName}/Documents";
package = pkgs.catppuccin-papirus-folders; gitName = fullName;
name = "Papirus-Light"; gitEmail = email;
};
theme = {
name = "catppuccin-latte-lavender-compact+rimless";
package = pkgs.catppuccin-gtk.override {
accents = [ "lavender" ];
size = "compact";
tweaks = [ "rimless" ];
variant = "latte";
};
};
}; };
};
} }

View File

@ -0,0 +1,278 @@
# Stylix-themed program configurations
# All programs here are managed via programs.<name>.enable for Stylix auto-theming
{ config, pkgs, lib, ... }:
{
programs = {
#
# Terminals
#
ghostty = {
enable = true;
settings = {
# Font managed by Stylix, but we can override family here
# Stylix sets font-size via stylix.fonts.sizes.terminal
font-family = "Maple Mono NF";
# Ligatures - Maple Mono NF has full ligature support
font-feature = [
"+calt" # contextual alternates
"+liga" # standard ligatures
];
window-padding-x = 4;
window-padding-y = 4;
keybind = [
"ctrl+shift+plus=increase_font_size:1"
"shift+enter=text:\\n"
];
};
};
foot = {
enable = true;
# Stylix handles colors and fonts
settings = {
main = {
pad = "4x4";
};
};
};
#
# Editor
#
helix = {
enable = true;
# Stylix sets the theme, but we override syntax tokens for minimal highlighting
# Philosophy: Only keywords, strings, comments, numbers get color - rest is plain text
themes.stylix = {
# Inherit Stylix's base theme (UI, palette, etc.)
inherits = "stylix";
# Minimal syntax highlighting - only 4 categories get color
# Comments - stand out
"comment" = { fg = "yellow"; modifiers = ["italic"]; };
# Keywords - highlighted and italic
"keyword" = { fg = "magenta"; modifiers = ["italic"]; };
"keyword.control" = { fg = "magenta"; modifiers = ["italic"]; };
"keyword.directive" = { fg = "magenta"; modifiers = ["italic"]; };
"keyword.function" = { fg = "magenta"; modifiers = ["italic"]; };
"keyword.operator" = { fg = "magenta"; modifiers = ["italic"]; };
"keyword.return" = { fg = "magenta"; modifiers = ["italic"]; };
"keyword.storage" = { fg = "magenta"; modifiers = ["italic"]; };
# Strings - highlighted
"string" = "green";
"string.regexp" = "red";
"string.special" = "green";
# Numbers/constants - highlighted
"constant.numeric" = "red";
"constant.builtin" = "red";
"constant.character.escape" = "red";
# Functions remain plain text
"function" = "text";
"function.builtin" = "text";
"function.method" = "text";
"function.macro" = "text";
# Variables remain plain text
"variable" = "text";
"variable.builtin" = "text";
"variable.parameter" = "text";
"variable.other.member" = "text";
# Types get subtle highlight
"type" = { fg = "cyan"; modifiers = ["italic"]; };
"type.builtin" = "cyan";
# Top-level definitions get accent
"function.definition" = { fg = "text"; modifiers = ["bold"]; };
"type.definition" = { fg = "text"; modifiers = ["bold"]; };
# Everything else plain
"constructor" = "text";
"attribute" = "text";
"label" = "text";
"namespace" = "text";
"tag" = "text";
# Punctuation slightly dimmed
"punctuation" = { fg = "text"; modifiers = ["dim"]; };
"punctuation.bracket" = { fg = "text"; modifiers = ["dim"]; };
"punctuation.delimiter" = { fg = "text"; modifiers = ["dim"]; };
"punctuation.special" = { fg = "text"; modifiers = ["dim"]; };
"operator" = { fg = "text"; modifiers = ["dim"]; };
# Markup
"markup.heading" = { fg = "cyan"; modifiers = ["bold"]; };
"markup.list" = "magenta";
"markup.bold" = { modifiers = ["bold"]; };
"markup.italic" = { modifiers = ["italic"]; };
"markup.strikethrough" = { modifiers = ["crossed_out"]; };
"markup.link.url" = { fg = "blue"; modifiers = ["underlined"]; };
"markup.link.text" = "magenta";
"markup.quote" = "green";
"markup.raw" = "green";
};
settings = {
# Standard QWERTY keybindings
keys.normal = {
# Navigation
"S-tab" = "jump_backward";
"C-d" = [ "page_cursor_half_down" "align_view_center" ];
"C-u" = [ "page_cursor_half_up" "align_view_center" ];
# Selection
C-s = "split_selection_on_newline";
C-minus = "merge_selections";
C-_ = "merge_consecutive_selections";
"C-;" = "flip_selections";
"C-:" = "ensure_selections_forward";
"C-," = "remove_primary_selection";
# Misc
"C-/" = "toggle_comments";
"@" = ":append-output git config get user.email";
space = {
B = ":sh git log -n 5 --format='format:%%h (%%an: %%ar) %%s' --no-patch -L%{cursor_line},+1:%{buffer_name}";
x = ":write-buffer-close";
X = ":write-quit-all";
o = ":config-open";
h = "hover";
k = "select_references_to_symbol_under_cursor";
};
g = {
"/" = "goto_next_buffer";
"\\" = "goto_previous_buffer";
};
m.m = [ "select_mode" "match_brackets" "normal_mode" ];
};
keys.select = {
"C-d" = [ "page_cursor_half_down" "align_view_center" ];
"C-u" = [ "page_cursor_half_up" "align_view_center" ];
g = {
"/" = "goto_next_buffer";
"\\" = "goto_previous_buffer";
};
};
editor = {
auto-format = true;
auto-save = true;
bufferline = "always";
color-modes = true;
completion-timeout = 5;
cursorcolumn = true;
cursorline = true;
indent-heuristic = "tree-sitter";
line-number = "relative";
rulers = [ 120 ];
text-width = 120;
end-of-line-diagnostics = "hint";
cursor-shape = {
insert = "bar";
normal = "block";
select = "underline";
};
file-picker.hidden = false;
indent-guides.render = true;
inline-diagnostics = {
cursor-line = "warning";
other-lines = "disable";
prefix-len = 5;
max-diagnostics = 1;
max-wrap = 30;
};
lsp = {
display-messages = true;
display-inlay-hints = true;
};
soft-wrap = {
enable = true;
max-wrap = 30;
};
statusline = {
left = [ "mode" "file-modification-indicator" "spinner" "version-control" ];
center = [ "file-name" ];
right = [ "diagnostics" "selections" "register" "position" "file-encoding" ];
mode.normal = "Normal";
mode.insert = "Insert";
mode.select = "Select";
};
whitespace.render = {
space = "all";
tab = "all";
tabpad = "all";
newline = "none";
nbsp = "none";
};
whitespace.characters = {
space = " ";
tab = "";
tabpad = " ";
};
};
};
languages = {
language = [
{
name = "markdown";
language-servers = [ "marksman" ];
}
{
name = "nix";
language-servers = [ "nil" ];
}
{
name = "python";
language-servers = [ "pylsp" ];
}
];
language-server.ltex-ls = {
command = "ltex-ls";
};
};
};
#
# CLI Tools
#
bat.enable = true;
fzf = {
enable = true;
enableZshIntegration = true;
};
btop.enable = true;
mpv.enable = true;
#
# Launcher
#
wofi.enable = true;
};
}

View File

@ -1,162 +0,0 @@
{ lib, config, pkgs, ... }:
{
options.labwc = {
enable = lib.mkEnableOption "Enable labwc window manager.";
useNonFree = lib.mkOption {
default = false;
example = true;
description = "Whether to enable non-free software in the labwc config";
};
installGaming = lib.mkOption {
default = false;
example = true;
description = "Whether to install gaming software on the system.";
};
systemPackages = lib.mkOption {
default = [];
description = "Add any additional packages desired. Merged with labwc defaults.";
};
};
###
## Configuration
###
config = lib.mkIf config.labwc.enable {
programs.dconf.enable = true;
nixpkgs.config.allowUnfree = config.labwc.useNonFree;
# For R2ModMan
# nixpkgs.config.permittedInsecurePackages = [
# "electron-25.9.0"
# ];
###
## XDG portal setup
###
xdg.portal = {
config = {
common = {
default = [
"wlr"
];
};
};
extraPortals = with pkgs; [
xdg-desktop-portal-gtk
];
wlr.enable = true;
enable = true;
};
xdg.sounds.enable = true;
###
## System Packages
###
environment.systemPackages = with pkgs; lib.lists.flatten [
[
bash
file-roller # for thunar archive plugin
foot
git
glib
grim
sway-contrib.grimshot
ghostscript
labwc
libnotify
kanshi
mako
spot
networkmanagerapplet
nwg-dock
nwg-drawer
nwg-look
pavucontrol
slurp
swaylock
swayidle
swww
wl-clipboard
cliphist
waybar
wdisplays
xdg-utils
zsh
]
config.labwc.systemPackages
# (lib.mkIf config.labwc.installGaming [
# pkgs.lutris
# ])
];
# Thunar config
programs.thunar = {
enable = true;
plugins = with pkgs.xfce; [
thunar-archive-plugin
thunar-volman
];
};
# file-roller added to environment.systemPackages above
programs.xfconf.enable = true;
programs.zsh.enable = true;
programs.steam.enable = config.labwc.installGaming;
programs.gamemode.enable = true;
###
## Services
###
# Printing
services.flatpak.enable = true;
services.printing.enable = true;
services.printing.drivers = [ pkgs.brlaser ];
services.gvfs.enable = true; # thunar functionalities
services.openssh.enable = true;
services.dbus.enable = true;
services.pipewire = {
enable = true;
alsa.enable = true;
pulse.enable = true;
};
###
## Misc
###
# sound.enable = true;
# Necessary for home-manager labwc setup
security.polkit.enable = true;
services.greetd = {
enable = true;
settings = rec {
initial_session = {
command = "${pkgs.labwc}/bin/labwc";
user = "jaci";
};
default_session = initial_session;
};
};
services.xserver.videoDrivers = [ "amdgpu" ];
# Enable HIP
systemd.tmpfiles.rules = [
"L+ /opt/rocm/hip - - - - ${pkgs.rocmPackages.clr}"
];
hardware.graphics = {
# Mesa
enable = true;
enable32Bit = true;
# Rocm support
extraPackages = with pkgs; [
rocmPackages.clr.icd
];
};
};
}

View File

@ -0,0 +1,256 @@
{
inputs,
lib,
config,
pkgs,
...
}:
let
unstable = import inputs.nixpkgs-unstable {
system = "x86_64-linux";
config.allowUnfree = true;
};
in
{
options.niriwm = {
enable = lib.mkEnableOption "Enable niri window manager.";
useNonFree = lib.mkOption {
default = false;
example = true;
description = "Whether to enable non-free software in the niri config";
};
installGaming = lib.mkOption {
default = false;
example = true;
description = "Whether to install gaming software on the system.";
};
systemPackages = lib.mkOption {
default = [ ];
description = "Add any additional packages desired. Merged with niri defaults.";
};
user = lib.mkOption {
type = lib.types.str;
};
};
###
## Configuration
###
config = lib.mkIf config.niriwm.enable {
nixpkgs.config.allowUnfree = config.niriwm.useNonFree;
###
## XDG portal setup
###
xdg.portal = {
config = {
common = {
default = [
"wlr"
];
};
};
extraPortals = with pkgs; [
xdg-desktop-portal-gnome
];
wlr.enable = true;
enable = true;
};
xdg.sounds.enable = true;
###
## System Packages
###
environment.systemPackages =
with pkgs;
lib.lists.flatten [
[
bash
egl-wayland
# foot is in programs.nix for Stylix theming
git
glib # gsettings
grim
kanshi
libnotify
lxqt.lxqt-policykit
man-pages
man-pages-posix
nautilus
networkmanagerapplet
nwg-drawer
pavucontrol
slurp
swaylock
swayosd
syncthingtray
unstable.ghostty
unstable.xwayland-satellite
# waybar is in programs.nix for Stylix theming
wdisplays
wl-clipboard
# wofi is in programs.nix for Stylix theming
xdg-utils
zsh
]
config.niriwm.systemPackages
];
environment.variables.QT_STYLE_OVERRIDE = "kvantum";
environment.sessionVariables = {
# use wayland
MOZ_ENABLE_WAYLAND = "1";
T_QPA_PLATFORM = "wayland";
GDK_BACKEND = "wayland";
WLR_NO_HARDWARE_CURSORS = "1";
ELECTRON_OZONE_PLATFORM_HINT = "auto";
NIXOS_OZONE_WL = "1";
# VA-API driver for hardware video acceleration (Intel 13th gen)
LIBVA_DRIVER_NAME = "iHD";
};
# adds additional man pages
documentation.dev.enable = true;
programs.gamemode = {
enable = true;
settings = {
general = {
reaper_freq = 5;
desiredgov = "performance";
softrealtime = "auto";
};
};
};
programs.kdeconnect.enable = true;
programs.niri.enable = true;
programs.regreet.enable = true;
programs.xfconf.enable = true;
programs.zsh.enable = true;
programs.ssh.startAgent = false; # Using GNOME Keyring's gcr-ssh-agent instead
programs.steam.enable = config.niriwm.installGaming;
# For nautilus
services.gnome.sushi.enable = true;
programs.nautilus-open-any-terminal = {
enable = true;
terminal = "ghostty";
};
services.syncthing = {
enable = true;
dataDir = "/home/${config.niriwm.user}/.syncthing";
openDefaultPorts = true;
user = config.niriwm.user;
};
systemd.services.syncthing.environment.STNODEFAULTFOLDER = "true"; # Don't create default ~/Sync folder
# Set zsh as the default shell system-wide
users.defaultUserShell = pkgs.zsh;
environment.shells = with pkgs; [
zsh
bash
];
###
## Services
###
services.blueman.enable = true;
services.gvfs.enable = true; # file manager mount, trash, etc
services.tumbler.enable = true; # thumbnails
services.openssh.enable = true;
services.dbus.enable = true;
services.gnome.gnome-keyring.enable = true;
services.flatpak.enable = true;
services.usbmuxd.enable = false;
# For yubioath desktop
services.pcscd.enable = true;
# Printing
services.printing = {
enable = true;
browsing = true;
drivers = [ pkgs.brlaser ];
};
# Audio - Modern PipeWire setup for Framework laptop
# Disable PulseAudio in favor of PipeWire
services.pulseaudio.enable = false;
security.rtkit.enable = true;
services.pipewire = {
enable = true;
audio.enable = true;
alsa.enable = true;
alsa.support32Bit = true;
pulse.enable = true;
wireplumber.enable = true;
wireplumber.extraConfig = {
"wireplumber.settings" = {
bluetooth.autoswitch-to-headset-profile = false;
};
bluetoothEnhancements = {
"monitor.bluez.properties" = {
"bluez5.enable-sbc-xq" = true;
"bluez5.enable-msbc" = true;
"bluez5.enable-hw-volume" = true;
# Default roles
"bluez5.roles" = [
"a2dp_sink"
"a2dp_source"
"bap_sink"
"bap_source"
"hfp_hf"
"hfp_ag"
];
};
};
};
};
###
## Misc
###
# Necessary for home-manager niri setup
security.polkit.enable = true;
# Keyring setup
security.pam.services.greetd.enableGnomeKeyring = true;
security.pam.services.login.enableGnomeKeyring = true;
hardware.bluetooth = {
enable = true;
powerOnBoot = true;
settings = {
General = {
Name = "Jaci-Frame";
ControllerMode = "dual";
FastConnectable = "true";
Experimental = "true";
};
Policy = {
AutoEnable = "true";
};
LE = {
EnableAdvMonInterleaveScan = 1;
};
};
};
#
# Hardware scanning support
#
hardware.sane = {
enable = true;
brscan5.enable = true;
};
#
# udev rules
#
services.udev.extraRules = ''
# For ddcutil monitor controls
KERNEL=="i2c-[0-9]*", GROUP="i2c", MODE="0660"
'';
};
}

View File

@ -0,0 +1,64 @@
{ inputs, lib, config, pkgs, ... }:
{
imports = [
../../../shared/modules/home-manager/waybar.nix
];
options.nirihome = {
enable = lib.mkEnableOption "Enable niri home config";
homePackages = lib.mkOption {
default = [];
description = "Add any additional packages desired. Merged with niri defaults.";
};
};
config = lib.mkIf config.nirihome.enable {
# Note: We don't use wayland.windowManager.niri in home-manager
# because we manage the niri config through dotfiles.
# The system-level module enables niri via programs.niri.enable
# Import systemd variables for niri
systemd.user.sessionVariables = {
WAYLAND_DISPLAY = "wayland-1";
XDG_CURRENT_DESKTOP = "niri";
};
# Cursor is managed by Stylix (stylix.cursor in jaci/default.nix)
# Waybar with Stylix theming
waybarConfig.enable = true;
home.packages = with pkgs; lib.lists.flatten [
[
### niri packages
swaybg
swaylock-effects
# Etc
gopsuinfo # For system stats in panel
wl-clipboard # System clipboard
brightnessctl
wev
wdisplays
# Notifs
libnotify
swaynotificationcenter
# Tray Applets
networkmanagerapplet
pavucontrol
syncthingtray
tailscale-systray
# include portals here for flatpak
xdg-desktop-portal-gnome
xdg-desktop-portal-gtk
]
config.nirihome.homePackages
];
programs.cava = {
enable = true;
settings = {
smoothing.noise_reduction = 55;
};
};
};
}

View File

@ -1,6 +1,10 @@
# Do not modify this file! It was generated by nixos-generate-config # Do not modify this file! It was generated by 'nixos-generate-config'
# and may be overwritten by future invocations. Please make changes # and may be overwritten by future invocations. Please make changes
# to /etc/nixos/configuration.nix instead. # to /etc/nixos/configuration.nix instead.
#
# NOTE: This file is a template for Framework 12 Intel hardware.
# The disk UUIDs below are placeholders and need to be updated after
# running nixos-generate-config on the actual hardware.
{ config, lib, pkgs, modulesPath, ... }: { config, lib, pkgs, modulesPath, ... }:
{ {
@ -8,11 +12,12 @@
[ (modulesPath + "/installer/scan/not-detected.nix") [ (modulesPath + "/installer/scan/not-detected.nix")
]; ];
boot.initrd.availableKernelModules = [ "nvme" "xhci_pci" "ahci" "usbhid" "usb_storage" "sd_mod" ]; boot.initrd.availableKernelModules = [ "xhci_pci" "nvme" "usbhid" "usb_storage" "sd_mod" ];
boot.initrd.kernelModules = [ "amdgpu" ]; boot.initrd.kernelModules = [ ];
boot.kernelModules = [ "kvm-amd" ]; boot.kernelModules = [ "kvm-intel" ];
boot.extraModulePackages = [ ]; boot.extraModulePackages = [ ];
# TODO: Update these UUIDs after running nixos-generate-config on actual hardware
fileSystems."/" = fileSystems."/" =
{ device = "/dev/disk/by-label/NIXROOT"; { device = "/dev/disk/by-label/NIXROOT";
fsType = "ext4"; fsType = "ext4";
@ -21,6 +26,7 @@
fileSystems."/boot" = fileSystems."/boot" =
{ device = "/dev/disk/by-label/NIXBOOT"; { device = "/dev/disk/by-label/NIXBOOT";
fsType = "vfat"; fsType = "vfat";
options = [ "fmask=0077" "dmask=0077" ];
}; };
swapDevices = [ ]; swapDevices = [ ];
@ -30,9 +36,7 @@
# still possible to use this option, but it's recommended to use it in conjunction # still possible to use this option, but it's recommended to use it in conjunction
# with explicit per-interface declarations with `networking.interfaces.<interface>.useDHCP`. # with explicit per-interface declarations with `networking.interfaces.<interface>.useDHCP`.
networking.useDHCP = lib.mkDefault true; networking.useDHCP = lib.mkDefault true;
# networking.interfaces.eno1.useDHCP = lib.mkDefault true;
# networking.interfaces.wlp11s0.useDHCP = lib.mkDefault true;
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
hardware.cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
} }

View File

@ -103,8 +103,8 @@ in
"idle_inhibitor" = { "idle_inhibitor" = {
format = "{icon} "; format = "{icon} ";
format-icons = { format-icons = {
activated = ""; activated = "󰛐";
deactivated = ""; deactivated = "󰛑";
}; };
}; };
@ -115,8 +115,8 @@ in
}; };
format = "{icon} {capacity}%"; format = "{icon} {capacity}%";
format-charging = "{capacity}% 󰂄"; format-charging = "{capacity}% 󰂄";
format-plugged = "{capacity}% "; format-plugged = "{capacity}% ";
format-icons = [ "" "" "" "" "" ]; format-icons = [ "󰁺" "󰁼" "󰁾" "󰂁" "󱈑" ];
}; };
clock = { clock = {
@ -127,7 +127,7 @@ in
cpu = { cpu = {
interval = 5; interval = 5;
format = " {usage}%"; format = " {usage}%";
states = { states = {
warning = 70; warning = 70;
critical = 90; critical = 90;
@ -137,7 +137,7 @@ in
memory = { memory = {
interval = 5; interval = 5;
format = " {}%"; format = " {}%";
on-click = "${cfg.terminal} -e 'htop'"; on-click = "${cfg.terminal} -e 'htop'";
states = { states = {
warning = 70; warning = 70;
@ -147,8 +147,8 @@ in
network = { network = {
interval = 5; interval = 5;
format-wifi = ""; format-wifi = "";
format-ethernet = " {ifname}: {ipaddr}/{cidr}"; format-ethernet = " {ifname}: {ipaddr}/{cidr}";
format-disconnected = " Disconnected"; format-disconnected = " Disconnected";
tooltip-format = "{essid} - {ifname}:{ipaddr} {bandwidthUpBytes} {bandwidthDownBytes}"; tooltip-format = "{essid} - {ifname}:{ipaddr} {bandwidthUpBytes} {bandwidthDownBytes}";
on-click = "${cfg.terminal} -e 'nmtui'"; on-click = "${cfg.terminal} -e 'nmtui'";
@ -224,10 +224,10 @@ in
all-outputs = true; all-outputs = true;
format = " {icon} "; format = " {icon} ";
format-icons = { format-icons = {
term = ""; term = "";
net = ""; net = "󰖟";
chat = "󰭻"; chat = "󰭻";
scratch = ""; scratch = "";
"1" = " 1"; "1" = " 1";
"2" = " 2"; "2" = " 2";
"3" = " 3"; "3" = " 3";
@ -247,15 +247,15 @@ in
format-bluetooth-muted = " {icon} {format_source}"; format-bluetooth-muted = " {icon} {format_source}";
format-muted = " {format_source}"; format-muted = " {format_source}";
format-source = "{volume}% "; format-source = "{volume}% ";
format-source-muted = ""; format-source-muted = "";
format-icons = { format-icons = {
headphone = [ "" "" "" "" "" ]; # headphone = [ "" "" "" "" "" ];
hands-free = ""; # hands-free = "";
headset = ""; headset = "";
phone = ""; # phone = "";
portable = ""; # portable = "";
car = ""; # car = "";
default = [ "" "" "" ]; default = [ "" "" "" ];
}; };
on-click = "pavucontrol"; on-click = "pavucontrol";
on-scroll-up = "pactl set-sink-volume @DEFAULT_SINK@ +2%"; on-scroll-up = "pactl set-sink-volume @DEFAULT_SINK@ +2%";
@ -278,9 +278,9 @@ in
"custom/storage" = { "custom/storage" = {
format = "{icon} {percentage}%"; format = "{icon} {percentage}%";
format-icons = { format-icons = {
default = ""; default = "󰋊";
warning = ""; warning = "󰋊";
critical = ""; critical = "󰋊";
}; };
exec = ''usage=$(df / --output=pcent | tail -n1 | tr -d ' %'); if [ $usage -ge 90 ]; then class="critical"; elif [ $usage -ge 75 ]; then class="warning"; else class="default"; fi; echo "{\"percentage\":$usage,\"class\":\"$class\"}"''; exec = ''usage=$(df / --output=pcent | tail -n1 | tr -d ' %'); if [ $usage -ge 90 ]; then class="critical"; elif [ $usage -ge 75 ]; then class="warning"; else class="default"; fi; echo "{\"percentage\":$usage,\"class\":\"$class\"}"'';
return-type = "json"; return-type = "json";
@ -289,7 +289,7 @@ in
}; };
"custom/launcher" = { "custom/launcher" = {
format = " "; format = "";
on-click = cfg.launcher; on-click = cfg.launcher;
tooltip = false; tooltip = false;
}; };