add noctalia, oh wow

This commit is contained in:
Nathan Anderson 2026-02-10 23:30:23 -07:00
parent d1bb9658ce
commit b470ce30ba
86 changed files with 451 additions and 262 deletions

21
flake.lock generated
View File

@ -246,6 +246,26 @@
"type": "github"
}
},
"noctalia": {
"inputs": {
"nixpkgs": [
"nixpkgs-unstable"
]
},
"locked": {
"lastModified": 1770781953,
"narHash": "sha256-yrIjM7EGTJsSp3E5UfypzJIIt2AviE59V3Wy1uQJrxg=",
"owner": "noctalia-dev",
"repo": "noctalia-shell",
"rev": "17138ca7c042da096b9c8c9422de4ed4e2f91bcd",
"type": "github"
},
"original": {
"owner": "noctalia-dev",
"repo": "noctalia-shell",
"type": "github"
}
},
"nur": {
"inputs": {
"flake-parts": "flake-parts",
@ -296,6 +316,7 @@
"nixos-hardware": "nixos-hardware",
"nixpkgs": "nixpkgs",
"nixpkgs-unstable": "nixpkgs-unstable",
"noctalia": "noctalia",
"nur": "nur",
"stylix": "stylix"
}

View File

@ -15,9 +15,13 @@
};
nur.url = "github:nix-community/NUR";
nixos-hardware.url = "github:NixOS/nixos-hardware/master";
noctalia = {
url = "github:noctalia-dev/noctalia-shell";
inputs.nixpkgs.follows = "nixpkgs-unstable";
};
};
outputs = { self, nixpkgs, nixpkgs-unstable, stylix, nur, home-manager, nixos-hardware, ... } @ inputs:
outputs = { self, nixpkgs, nixpkgs-unstable, stylix, nur, home-manager, nixos-hardware, noctalia, ... } @ inputs:
let
inherit (self) outputs;
system = "x86_64-linux";

View File

@ -35,6 +35,7 @@ in
modules/niri/niri_conf.nix
modules/colemak-ec.nix
../shared/modules/system/power_manager.nix
../shared/modules/system/noctalia-system.nix
];
config = {
@ -116,8 +117,12 @@ in
power_manager = {
enable = true;
backend = "power-profiles-daemon"; # Required for Noctalia power profile widget
};
# Enable Noctalia shell system services
noctaliaSystem.enable = true;
niriwm = {
enable = true;
useNonFree = true;

View File

@ -3,8 +3,8 @@
//
// gui startup
spawn-at-startup "swaybg" "-i" "/home/nate/nixos/frame12/wallpaper.png" "-m" "fill"
spawn-at-startup "waybar"
// spawn-at-startup "swaybg" "-i" "/home/nate/nixos/frame12/wallpaper.png" "-m" "fill"
// spawn-at-startup "waybar"
spawn-at-startup "keepassxc"
spawn-at-startup "flatpak" "run" "org.signal.Signal"
// shell startup

View File

@ -10,6 +10,7 @@
../../../shared/modules/apps/firefox/firefox.nix
../../../shared/modules/apps/helix.nix
../../../shared/modules/home-manager/git-autosync.nix
../../../shared/modules/home-manager/noctalia.nix
../niri/niri_home.nix
./programs.nix
];
@ -29,7 +30,17 @@
# Enable niri home configuration
nirihome = {
enable = true;
homePackages = [ ];
homePackages = [ ];
};
# Enable Noctalia shell (replaces Waybar, SwayNC, SwayOSD, wlsunset)
noctaliaShell = {
enable = true;
barPosition = "top";
darkMode = true;
colorScheme = "Noctalia (default)"; # Or try "Monochrome" to complement woodland theme
locationName = "Denver";
avatarImage = "/home/${userName}/.face";
};
# Additional user packages
@ -318,12 +329,13 @@
# Stylix handles Qt and GTK theming
services.wlsunset = {
enable = true;
sunrise = "07:00";
sunset = "17:00";
temperature.night = 3500;
};
# Noctalia has built-in night light, so wlsunset is disabled via noctalia module
# services.wlsunset = {
# enable = true;
# sunrise = "07:00";
# sunset = "17:00";
# temperature.night = 3500;
# };
services.kdeconnect = {
enable = true;
@ -333,21 +345,19 @@
# 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;
};
};
# Noctalia replaces SwayOSD and SwayNC - disabled via noctalia module
# services.swayosd = {
# enable = true;
# topMargin = 0.9;
# };
# services.swaync = {
# enable = true;
# settings = {
# positionX = "center";
# positionY = "top";
# notification-window-width = 800;
# };
# };
# Git autosync for star-command
services.git-autosync = {

View File

@ -3,7 +3,7 @@
userName = "jaci";
fullName = "Jaci Anderson";
email = "jaci.s.anderson@gmail.com";
hostName = "meowyxlife";
hostName = "jaci";
desktop = "niri";
gaming = true;
in
@ -25,17 +25,14 @@
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 = {
@ -55,18 +52,20 @@
name = "Noto Color Emoji";
};
sizes = {
applications = 12;
desktop = 10;
popups = 10;
terminal = 11;
applications = 14;
desktop = 14;
popups = 14;
terminal = 14;
};
};
# Icon theme for tray applets (nm-applet, etc.)
# Note: "Reversal-dark" has dark icons (for light backgrounds)
# "Reversal" has light icons (for dark backgrounds)
iconTheme = {
enable = true;
package = pkgs.reversal-icon-theme;
light = "Reversal";
light = "Reversal-dark";
dark = "Reversal";
};

View File

@ -39,6 +39,7 @@ in
modules/user/main_user.nix
modules/niri/niri_conf.nix
../shared/modules/system/power_manager.nix
../shared/modules/system/noctalia-system.nix
];
config = {
@ -67,7 +68,7 @@ in
boot = {
plymouth = {
enable = true;
theme = "kiki";
theme = "kiki-pixel"; # Options: "kiki" (waifu2x upscaled) or "kiki-pixel" (pixel art)
themePackages = [
(pkgs.runCommand "plymouth-kiki-theme" { } ''
mkdir -p $out/share/plymouth/themes/kiki
@ -75,9 +76,18 @@ in
substituteInPlace $out/share/plymouth/themes/kiki/kiki.plymouth \
--replace-fail "@IMAGEDIR@" "$out/share/plymouth/themes/kiki"
'')
(pkgs.runCommand "plymouth-kiki-pixel-theme" { } ''
mkdir -p $out/share/plymouth/themes/kiki-pixel
cp -r ${./kiki-plymouth-theme/kiki-pixel}/* $out/share/plymouth/themes/kiki-pixel/
substituteInPlace $out/share/plymouth/themes/kiki-pixel/kiki-pixel.plymouth \
--replace-fail "@IMAGEDIR@" "$out/share/plymouth/themes/kiki-pixel"
'')
];
};
# Enable systemd in initrd for better LUKS unlocking with Plymouth
initrd.systemd.enable = true;
# Enable "Silent Boot"
consoleLogLevel = 0;
initrd.verbose = false;
@ -113,8 +123,12 @@ in
power_manager = {
enable = true;
backend = "power-profiles-daemon"; # Required for Noctalia power profile widget
};
# Enable Noctalia shell system services
noctaliaSystem.enable = true;
niriwm = {
enable = true;
useNonFree = true;

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 616 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 960 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 946 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

View File

@ -0,0 +1,54 @@
[Plymouth Theme]
Name=Kiki Pixel
Description=Pixel art Kiki animation from Kiki's Delivery Service.
ModuleName=two-step
[two-step]
Font=Cantarell 12
TitleFont=Cantarell Light 30
ImageDir=@IMAGEDIR@
DialogHorizontalAlignment=.5
DialogVerticalAlignment=.382
TitleHorizontalAlignment=.5
TitleVerticalAlignment=.382
HorizontalAlignment=.5
VerticalAlignment=.5
WatermarkHorizontalAlignment=.5
WatermarkVerticalAlignment=.96
Transition=none
TransitionDuration=0.0
BackgroundStartColor=0x82ADEA
BackgroundEndColor=0x6B9BD1
ProgressBarBackgroundColor=0x5A8AC0
ProgressBarForegroundColor=0xffffff
MessageBelowAnimation=true
[boot-up]
UseEndAnimation=false
[shutdown]
UseEndAnimation=false
[reboot]
UseEndAnimation=false
[updates]
SuppressMessages=true
ProgressBarShowPercentComplete=true
UseProgressBar=true
Title=Installing Updates...
SubTitle=Do not turn off your computer
[system-upgrade]
SuppressMessages=true
ProgressBarShowPercentComplete=true
UseProgressBar=true
Title=Upgrading System...
SubTitle=Do not turn off your computer
[firmware-upgrade]
SuppressMessages=true
ProgressBarShowPercentComplete=true
UseProgressBar=true
Title=Upgrading Firmware...
SubTitle=Do not turn off your computer

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 149 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 149 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 148 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 148 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 148 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 148 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 148 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 148 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 148 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 148 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 148 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 148 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 148 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 148 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 147 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 148 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 149 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 149 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 148 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 148 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 148 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 147 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 148 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 147 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 148 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 148 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 148 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 149 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 149 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 148 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 148 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 148 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 74 KiB

After

Width:  |  Height:  |  Size: 3.7 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 74 KiB

After

Width:  |  Height:  |  Size: 3.7 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 74 KiB

After

Width:  |  Height:  |  Size: 3.7 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 74 KiB

After

Width:  |  Height:  |  Size: 3.7 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 72 KiB

After

Width:  |  Height:  |  Size: 3.6 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 72 KiB

After

Width:  |  Height:  |  Size: 3.6 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 72 KiB

After

Width:  |  Height:  |  Size: 3.7 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 72 KiB

After

Width:  |  Height:  |  Size: 3.7 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 73 KiB

After

Width:  |  Height:  |  Size: 3.7 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 73 KiB

After

Width:  |  Height:  |  Size: 3.7 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 73 KiB

After

Width:  |  Height:  |  Size: 3.7 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 73 KiB

After

Width:  |  Height:  |  Size: 3.7 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 73 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 73 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 73 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 73 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 71 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 71 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 71 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 71 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 73 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 73 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 73 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 73 KiB

View File

@ -5,14 +5,11 @@
// gui startup
spawn-at-startup "swaybg" "-i" "/home/jaci/nixos/jaci/kiki_background.jpg" "-m" "fill"
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
screenshot-path "~/Pictures/"// save screenshots just to clipboard
prefer-no-csd // (Client Side Decorations) ask clients to not add their own decorations
hotkey-overlay {
@ -28,11 +25,6 @@ output "eDP-1"{
transform "normal"
}
workspace "term"
workspace "net"
workspace "chat"
workspace "scratch"
//
// INPUTS
//
@ -41,8 +33,8 @@ input {
xkb {
layout "us"
}
repeat-delay 175
repeat-rate 50
repeat-delay 225
repeat-rate 40
}
touchpad {
@ -133,13 +125,13 @@ layout {
// All windows - corner radius, opacity
window-rule {
geometry-corner-radius 14 14 0 14
geometry-corner-radius 18 18 18 18
clip-to-geometry true
}
window-rule {
match is-active=true
opacity 0.99
opacity 1.00
}
window-rule {
@ -147,14 +139,6 @@ window-rule {
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"
@ -170,25 +154,6 @@ window-rule {
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
@ -322,20 +287,18 @@ binds {
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+1 { focus-workspace 1; }
Mod+2 { focus-workspace 2; }
Mod+3 { focus-workspace 3; }
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+1 { move-column-to-workspace 1; }
Mod+Shift+2 { move-column-to-workspace 2; }
Mod+Shift+3 { move-column-to-workspace 3; }
Mod+Shift+4 { move-column-to-workspace 4; }
Mod+Shift+5 { move-column-to-workspace 5; }
Mod+Shift+6 { move-column-to-workspace 6; }

View File

@ -9,6 +9,7 @@
../../../shared/modules/apps/firefox/firefox.nix
../../../shared/modules/apps/helix.nix
../../../shared/modules/home-manager/git-autosync.nix
../../../shared/modules/home-manager/noctalia.nix
../niri/niri_home.nix
./programs.nix
];
@ -31,22 +32,19 @@
homePackages = [ ];
};
# Enable Noctalia shell (replaces Waybar, SwayNC, SwayOSD, wlsunset)
noctaliaShell = {
enable = true;
barPosition = "top";
darkMode = false; # Jaci uses light mode
useWallpaperColors = true; # Generate colors from wallpaper
locationName = "Denver";
avatarImage = "/home/${userName}/.face";
};
# 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
#
@ -58,18 +56,9 @@
#
# Unix tools
#
duf
dust
fd
lsd
ripgrep
tre-command
gtop
htop
neofetch
unzip
gnupg
pinentry-tty
#
# Photo / Video
@ -158,17 +147,7 @@
};
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)
@ -193,8 +172,6 @@
# 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"
}
@ -205,7 +182,6 @@
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"
'';
@ -219,12 +195,13 @@
# Stylix handles Qt and GTK theming
services.wlsunset = {
enable = true;
sunrise = "07:00";
sunset = "17:00";
temperature.night = 3500;
};
# Noctalia has built-in night light, so wlsunset is disabled via noctalia module
# services.wlsunset = {
# enable = true;
# sunrise = "07:00";
# sunset = "17:00";
# temperature.night = 3500;
# };
services.kdeconnect = {
enable = true;
@ -234,21 +211,19 @@
# 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;
};
};
# Noctalia replaces SwayOSD and SwayNC - disabled via noctalia module
# services.swayosd = {
# enable = true;
# topMargin = 0.9;
# };
# services.swaync = {
# enable = true;
# settings = {
# positionX = "center";
# positionY = "top";
# notification-window-width = 800;
# };
# };
# Git autosync for Documents
services.git-autosync = {

View File

@ -71,12 +71,11 @@ in
# foot is in programs.nix for Stylix theming
git
glib # gsettings
gnome-software # GUI app store for Flatpak
grim
kanshi
libnotify
lxqt.lxqt-policykit
man-pages
man-pages-posix
nautilus
networkmanagerapplet
nwg-drawer
@ -109,9 +108,6 @@ in
LIBVA_DRIVER_NAME = "iHD";
};
# adds additional man pages
documentation.dev.enable = true;
programs.gamemode = {
enable = true;
settings = {

View File

@ -1 +0,0 @@
7376

View File

@ -1 +0,0 @@
4639

View File

@ -1,30 +0,0 @@
#!/usr/bin/env bash
PID_FILE="background.pid"
WP_LOC="/home/nate/.config/sway/wallpapers"
PREV_WP=""
NEW_WP=$(ls $WP_LOC | sort -R | tail -n 1)
transition[0]="any"
transition[1]="wave"
transition[2]="outer"
transition[3]="wipe"
transition[4]="center"
size=${#transition[@]}
swww kill
swww init
# echo $(pgrep -f background.sh) > $PID_FILE
while true
do
while [[ $PREV_WP == $NEW_WP ]]
do
NEW_WP=$(ls $WP_LOC | sort -R | tail -n 1)
done
index=$(($RANDOM % $size))
#echo "Picked $WP_LOC/$NEW_WP with effect ${transition[$index]}"
swww img $WP_LOC/$NEW_WP --transition-type ${transition[$index]}
PREV_WP=$NEW_WP
sleep 120
done

View File

@ -1 +0,0 @@
7376

View File

@ -1 +0,0 @@
4639

View File

@ -1,30 +0,0 @@
#!/usr/bin/env bash
PID_FILE="background.pid"
WP_LOC="/home/nate/.config/sway/wallpapers"
PREV_WP=""
NEW_WP=$(ls $WP_LOC | sort -R | tail -n 1)
transition[0]="any"
transition[1]="wave"
transition[2]="outer"
transition[3]="wipe"
transition[4]="center"
size=${#transition[@]}
swww kill
swww init
# echo $(pgrep -f background.sh) > $PID_FILE
while true
do
while [[ $PREV_WP == $NEW_WP ]]
do
NEW_WP=$(ls $WP_LOC | sort -R | tail -n 1)
done
index=$(($RANDOM % $size))
#echo "Picked $WP_LOC/$NEW_WP with effect ${transition[$index]}"
swww img $WP_LOC/$NEW_WP --transition-type ${transition[$index]}
PREV_WP=$NEW_WP
sleep 120
done

View File

@ -1 +0,0 @@
7376

View File

@ -1 +0,0 @@
4639

View File

@ -1,30 +0,0 @@
#!/usr/bin/env bash
PID_FILE="background.pid"
WP_LOC="/home/nate/.config/sway/wallpapers"
PREV_WP=""
NEW_WP=$(ls $WP_LOC | sort -R | tail -n 1)
transition[0]="any"
transition[1]="wave"
transition[2]="outer"
transition[3]="wipe"
transition[4]="center"
size=${#transition[@]}
swww kill
swww init
# echo $(pgrep -f background.sh) > $PID_FILE
while true
do
while [[ $PREV_WP == $NEW_WP ]]
do
NEW_WP=$(ls $WP_LOC | sort -R | tail -n 1)
done
index=$(($RANDOM % $size))
#echo "Picked $WP_LOC/$NEW_WP with effect ${transition[$index]}"
swww img $WP_LOC/$NEW_WP --transition-type ${transition[$index]}
PREV_WP=$NEW_WP
sleep 120
done

View File

@ -0,0 +1,181 @@
{ config, lib, pkgs, inputs, ... }:
with lib;
let
cfg = config.noctaliaShell;
in
{
imports = [
inputs.noctalia.homeModules.default
];
options.noctaliaShell = {
enable = mkEnableOption "Noctalia shell";
colorScheme = mkOption {
type = types.str;
default = "Noctalia (default)";
description = ''
Predefined color scheme to use. Options include:
"Noctalia (default)", "Monochrome", "Catppuccin Mocha", etc.
See Noctalia docs for full list.
'';
};
useWallpaperColors = mkOption {
type = types.bool;
default = false;
description = "Generate colors from wallpaper instead of using predefined scheme";
};
darkMode = mkOption {
type = types.bool;
default = true;
description = "Use dark mode for Noctalia shell";
};
barPosition = mkOption {
type = types.enum [ "top" "bottom" "left" "right" ];
default = "top";
description = "Position of the Noctalia bar";
};
barDensity = mkOption {
type = types.enum [ "default" "compact" ];
default = "default";
description = "Bar density (compact for vertical bars)";
};
enableDock = mkOption {
type = types.bool;
default = true;
description = "Enable the Noctalia dock";
};
dockPosition = mkOption {
type = types.enum [ "top" "bottom" "left" "right" ];
default = "bottom";
description = "Position of the dock";
};
pinnedApps = mkOption {
type = types.listOf types.str;
default = [ ];
description = "List of .desktop file names for pinned dock apps";
};
avatarImage = mkOption {
type = types.str;
default = "";
description = "Path to avatar image for user profile";
};
locationName = mkOption {
type = types.str;
default = "Denver";
description = "Location name for weather widget";
};
use12hourFormat = mkOption {
type = types.bool;
default = false;
description = "Use 12-hour time format";
};
useFahrenheit = mkOption {
type = types.bool;
default = false;
description = "Use Fahrenheit for temperature";
};
};
config = mkIf cfg.enable {
# Configure Noctalia shell via home-manager module
programs.noctalia-shell = {
enable = true;
# Don't install the package separately since systemd service handles it
# But we need it for IPC commands in keybinds
package = inputs.noctalia.packages.${pkgs.stdenv.hostPlatform.system}.default;
settings = {
colorSchemes = {
useWallpaperColors = cfg.useWallpaperColors;
predefinedScheme = cfg.colorScheme;
darkMode = cfg.darkMode;
};
bar = {
position = cfg.barPosition;
density = cfg.barDensity;
showCapsule = true;
floating = false;
widgets = {
left = [
{ id = "Launcher"; }
{ id = "Clock"; }
{ id = "SystemMonitor"; }
{ id = "ActiveWindow"; }
{ id = "MediaMini"; }
];
center = [
{ id = "Workspace"; }
];
right = [
{ id = "Tray"; }
{ id = "NotificationHistory"; }
{ id = "Battery"; }
{ id = "Volume"; }
{ id = "Brightness"; }
{ id = "ControlCenter"; }
];
};
};
dock = {
enabled = cfg.enableDock;
position = cfg.dockPosition;
displayMode = "auto_hide";
pinnedApps = cfg.pinnedApps;
};
general = {
avatarImage = cfg.avatarImage;
radiusRatio = 1;
animationSpeed = 1;
enableShadows = true;
};
location = {
name = cfg.locationName;
weatherEnabled = true;
use12hourFormat = cfg.use12hourFormat;
useFahrenheit = cfg.useFahrenheit;
};
notifications = {
enabled = true;
location = "top_right";
};
appLauncher = {
position = "center";
sortByMostUsed = true;
viewMode = "list";
};
};
};
# Disable conflicting services that Noctalia replaces
services.swayosd.enable = mkForce false;
services.swaync.enable = mkForce false;
# Disable wlsunset - Noctalia has built-in night light
services.wlsunset.enable = mkForce false;
# Disable waybar - Noctalia has its own bar
waybarConfig.enable = mkForce false;
programs.waybar.enable = mkForce false;
};
}

View File

@ -0,0 +1,42 @@
{ config, lib, pkgs, inputs, ... }:
with lib;
let
cfg = config.noctaliaSystem;
in
{
# Import Noctalia's NixOS module for systemd service
imports = [
inputs.noctalia.nixosModules.default
];
options.noctaliaSystem = {
enable = mkEnableOption "Noctalia shell system-level configuration";
enableSystemdService = mkOption {
type = types.bool;
default = true;
description = "Enable the Noctalia systemd service (starts after graphical-session.target)";
};
};
config = mkIf cfg.enable {
# Enable the systemd service if requested
services.noctalia-shell.enable = cfg.enableSystemdService;
# Required system services for Noctalia features
# NetworkManager - for wifi widget
networking.networkmanager.enable = mkDefault true;
# Bluetooth - for bluetooth widget
hardware.bluetooth.enable = mkDefault true;
# UPower - for battery widget
services.upower.enable = mkDefault true;
# Power profiles daemon - for power profile switching in Noctalia
# Note: This conflicts with auto-cpufreq, so we use power_manager module's option
services.power-profiles-daemon.enable = mkDefault true;
};
}

View File

@ -7,7 +7,17 @@ let
in
{
options.power_manager = {
enable = mkEnableOption "power management with auto-cpufreq";
enable = mkEnableOption "power management";
backend = mkOption {
type = types.enum [ "auto-cpufreq" "power-profiles-daemon" ];
default = "auto-cpufreq";
description = ''
Power management backend to use.
- auto-cpufreq: Automatic CPU frequency scaling (better battery life, no manual control)
- power-profiles-daemon: Manual power profile switching (works with Noctalia shell)
'';
};
settings = mkOption {
type = types.attrs;
@ -21,7 +31,7 @@ in
turbo = "auto";
};
};
description = "Auto-cpufreq configuration settings";
description = "Auto-cpufreq configuration settings (only used with auto-cpufreq backend)";
};
enableThermald = mkOption {
@ -37,27 +47,38 @@ in
};
};
config = mkIf cfg.enable {
services.auto-cpufreq = {
enable = true;
settings = cfg.settings;
};
config = mkIf cfg.enable (mkMerge [
# Common settings for both backends
{
services.upower.enable = mkIf cfg.enableUpower true;
services.thermald.enable = mkIf cfg.enableThermald true;
powerManagement.enable = true;
# Supporting services
services.upower.enable = mkIf cfg.enableUpower true;
services.thermald.enable = mkIf cfg.enableThermald true;
powerManagement.enable = mkIf cfg.enable true;
# Disable TLP regardless of backend (conflicts with both)
services.tlp.enable = mkForce false;
powerManagement.powertop.enable = mkForce false;
}
# Disable conflicting power management services
services.tlp.enable = mkForce false;
services.power-profiles-daemon.enable = mkForce false;
powerManagement.powertop.enable = mkForce false;
# Don't set a static CPU governor (let auto-cpufreq handle it)
powerManagement.cpuFreqGovernor = mkForce null;
};
# auto-cpufreq backend
(mkIf (cfg.backend == "auto-cpufreq") {
services.auto-cpufreq = {
enable = true;
settings = cfg.settings;
};
# # Warning if flake input is missing when expected
# warnings = optional (cfg.useFlake && !(inputs ? auto-cpufreq))
# "power_manager: useFlake is enabled but auto-cpufreq flake input not found. Using nixpkgs version instead.";
# Disable power-profiles-daemon (conflicts with auto-cpufreq)
services.power-profiles-daemon.enable = mkForce false;
# Don't set a static CPU governor (let auto-cpufreq handle it)
powerManagement.cpuFreqGovernor = mkForce null;
})
# power-profiles-daemon backend
(mkIf (cfg.backend == "power-profiles-daemon") {
services.power-profiles-daemon.enable = true;
# Disable auto-cpufreq (conflicts with power-profiles-daemon)
services.auto-cpufreq.enable = mkForce false;
})
]);
}