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" "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": { "nur": {
"inputs": { "inputs": {
"flake-parts": "flake-parts", "flake-parts": "flake-parts",
@ -296,6 +316,7 @@
"nixos-hardware": "nixos-hardware", "nixos-hardware": "nixos-hardware",
"nixpkgs": "nixpkgs", "nixpkgs": "nixpkgs",
"nixpkgs-unstable": "nixpkgs-unstable", "nixpkgs-unstable": "nixpkgs-unstable",
"noctalia": "noctalia",
"nur": "nur", "nur": "nur",
"stylix": "stylix" "stylix": "stylix"
} }

View File

@ -15,9 +15,13 @@
}; };
nur.url = "github:nix-community/NUR"; nur.url = "github:nix-community/NUR";
nixos-hardware.url = "github:NixOS/nixos-hardware/master"; 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 let
inherit (self) outputs; inherit (self) outputs;
system = "x86_64-linux"; system = "x86_64-linux";

View File

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

View File

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

View File

@ -10,6 +10,7 @@
../../../shared/modules/apps/firefox/firefox.nix ../../../shared/modules/apps/firefox/firefox.nix
../../../shared/modules/apps/helix.nix ../../../shared/modules/apps/helix.nix
../../../shared/modules/home-manager/git-autosync.nix ../../../shared/modules/home-manager/git-autosync.nix
../../../shared/modules/home-manager/noctalia.nix
../niri/niri_home.nix ../niri/niri_home.nix
./programs.nix ./programs.nix
]; ];
@ -32,6 +33,16 @@
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 # Additional user packages
# Note: Programs with Stylix theming are in programs.nix # Note: Programs with Stylix theming are in programs.nix
home.packages = with pkgs; [ home.packages = with pkgs; [
@ -318,12 +329,13 @@
# Stylix handles Qt and GTK theming # Stylix handles Qt and GTK theming
services.wlsunset = { # Noctalia has built-in night light, so wlsunset is disabled via noctalia module
enable = true; # services.wlsunset = {
sunrise = "07:00"; # enable = true;
sunset = "17:00"; # sunrise = "07:00";
temperature.night = 3500; # sunset = "17:00";
}; # temperature.night = 3500;
# };
services.kdeconnect = { services.kdeconnect = {
enable = true; enable = true;
@ -333,21 +345,19 @@
# Enable bluetooth headphone controls # Enable bluetooth headphone controls
services.mpris-proxy.enable = true; services.mpris-proxy.enable = true;
# SwayOSD - on-screen display for volume, brightness, caps lock # Noctalia replaces SwayOSD and SwayNC - disabled via noctalia module
services.swayosd = { # services.swayosd = {
enable = true; # enable = true;
topMargin = 0.9; # topMargin = 0.9;
}; # };
# services.swaync = {
# SwayNC - notification center (Stylix auto-themes this) # enable = true;
services.swaync = { # settings = {
enable = true; # positionX = "center";
settings = { # positionY = "top";
positionX = "center"; # notification-window-width = 800;
positionY = "top"; # };
notification-window-width = 800; # };
};
};
# Git autosync for star-command # Git autosync for star-command
services.git-autosync = { services.git-autosync = {

View File

@ -3,7 +3,7 @@
userName = "jaci"; userName = "jaci";
fullName = "Jaci Anderson"; fullName = "Jaci Anderson";
email = "jaci.s.anderson@gmail.com"; email = "jaci.s.anderson@gmail.com";
hostName = "meowyxlife"; hostName = "jaci";
desktop = "niri"; desktop = "niri";
gaming = true; gaming = true;
in in
@ -25,17 +25,14 @@
stylix = { stylix = {
enable = true; enable = true;
image = ./kiki_background.jpg; image = ./kiki_background.jpg;
# Auto-generate color scheme from wallpaper # Auto-generate color scheme from wallpaper
polarity = "light"; polarity = "light";
# System-wide cursor # System-wide cursor
cursor = { cursor = {
package = pkgs.bibata-cursors; package = pkgs.bibata-cursors;
name = "Bibata-Modern-Classic"; name = "Bibata-Modern-Classic";
size = 32; size = 32;
}; };
# Fonts # Fonts
fonts = { fonts = {
serif = { serif = {
@ -55,18 +52,20 @@
name = "Noto Color Emoji"; name = "Noto Color Emoji";
}; };
sizes = { sizes = {
applications = 12; applications = 14;
desktop = 10; desktop = 14;
popups = 10; popups = 14;
terminal = 11; terminal = 14;
}; };
}; };
# Icon theme for tray applets (nm-applet, etc.) # 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 = { iconTheme = {
enable = true; enable = true;
package = pkgs.reversal-icon-theme; package = pkgs.reversal-icon-theme;
light = "Reversal"; light = "Reversal-dark";
dark = "Reversal"; dark = "Reversal";
}; };

View File

@ -39,6 +39,7 @@ in
modules/user/main_user.nix modules/user/main_user.nix
modules/niri/niri_conf.nix modules/niri/niri_conf.nix
../shared/modules/system/power_manager.nix ../shared/modules/system/power_manager.nix
../shared/modules/system/noctalia-system.nix
]; ];
config = { config = {
@ -67,7 +68,7 @@ in
boot = { boot = {
plymouth = { plymouth = {
enable = true; enable = true;
theme = "kiki"; theme = "kiki-pixel"; # Options: "kiki" (waifu2x upscaled) or "kiki-pixel" (pixel art)
themePackages = [ themePackages = [
(pkgs.runCommand "plymouth-kiki-theme" { } '' (pkgs.runCommand "plymouth-kiki-theme" { } ''
mkdir -p $out/share/plymouth/themes/kiki mkdir -p $out/share/plymouth/themes/kiki
@ -75,9 +76,18 @@ in
substituteInPlace $out/share/plymouth/themes/kiki/kiki.plymouth \ substituteInPlace $out/share/plymouth/themes/kiki/kiki.plymouth \
--replace-fail "@IMAGEDIR@" "$out/share/plymouth/themes/kiki" --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" # Enable "Silent Boot"
consoleLogLevel = 0; consoleLogLevel = 0;
initrd.verbose = false; initrd.verbose = false;
@ -113,8 +123,12 @@ in
power_manager = { power_manager = {
enable = true; enable = true;
backend = "power-profiles-daemon"; # Required for Noctalia power profile widget
}; };
# Enable Noctalia shell system services
noctaliaSystem.enable = true;
niriwm = { niriwm = {
enable = true; enable = true;
useNonFree = 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 // gui startup
spawn-at-startup "swaybg" "-i" "/home/jaci/nixos/jaci/kiki_background.jpg" "-m" "fill" spawn-at-startup "swaybg" "-i" "/home/jaci/nixos/jaci/kiki_background.jpg" "-m" "fill"
spawn-at-startup "waybar" spawn-at-startup "waybar"
spawn-at-startup "keepassxc"
// shell startup // shell startup
spawn-sh-at-startup "kanshi"
spawn-sh-at-startup "sleep 5 && nm-applet --indicator" spawn-sh-at-startup "sleep 5 && nm-applet --indicator"
spawn-sh-at-startup "sleep 5 && syncthingtray --wait"
spawn-sh-at-startup "sleep 5 && swaync" 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 prefer-no-csd // (Client Side Decorations) ask clients to not add their own decorations
hotkey-overlay { hotkey-overlay {
@ -28,11 +25,6 @@ output "eDP-1"{
transform "normal" transform "normal"
} }
workspace "term"
workspace "net"
workspace "chat"
workspace "scratch"
// //
// INPUTS // INPUTS
// //
@ -41,8 +33,8 @@ input {
xkb { xkb {
layout "us" layout "us"
} }
repeat-delay 175 repeat-delay 225
repeat-rate 50 repeat-rate 40
} }
touchpad { touchpad {
@ -133,13 +125,13 @@ layout {
// All windows - corner radius, opacity // All windows - corner radius, opacity
window-rule { window-rule {
geometry-corner-radius 14 14 0 14 geometry-corner-radius 18 18 18 18
clip-to-geometry true clip-to-geometry true
} }
window-rule { window-rule {
match is-active=true match is-active=true
opacity 0.99 opacity 1.00
} }
window-rule { window-rule {
@ -147,14 +139,6 @@ window-rule {
opacity 0.92 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 // Net windows
window-rule { window-rule {
match app-id="firefox" match app-id="firefox"
@ -170,25 +154,6 @@ window-rule {
default-column-width { proportion 0.8; } default-column-width { proportion 0.8; }
block-out-from "screencast" 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 // File browser
@ -322,20 +287,18 @@ binds {
Mod+Shift+Page_Down { move-workspace-down; } Mod+Shift+Page_Down { move-workspace-down; }
Mod+Shift+Page_Up { move-workspace-up; } Mod+Shift+Page_Up { move-workspace-up; }
Mod+Minus { focus-workspace "scratch"; } Mod+1 { focus-workspace 1; }
Mod+1 { focus-workspace "term"; } Mod+2 { focus-workspace 2; }
Mod+2 { focus-workspace "net"; } Mod+3 { focus-workspace 3; }
Mod+3 { focus-workspace "chat"; }
Mod+4 { focus-workspace 4; } Mod+4 { focus-workspace 4; }
Mod+5 { focus-workspace 5; } Mod+5 { focus-workspace 5; }
Mod+6 { focus-workspace 6; } Mod+6 { focus-workspace 6; }
Mod+7 { focus-workspace 7; } Mod+7 { focus-workspace 7; }
Mod+8 { focus-workspace 8; } Mod+8 { focus-workspace 8; }
Mod+9 { focus-workspace 9; } Mod+9 { focus-workspace 9; }
Mod+Shift+Minus { move-column-to-workspace "scratch"; } Mod+Shift+1 { move-column-to-workspace 1; }
Mod+Shift+1 { move-column-to-workspace "term"; } Mod+Shift+2 { move-column-to-workspace 2; }
Mod+Shift+2 { move-column-to-workspace "net"; } Mod+Shift+3 { move-column-to-workspace 3; }
Mod+Shift+3 { move-column-to-workspace "chat"; }
Mod+Shift+4 { move-column-to-workspace 4; } Mod+Shift+4 { move-column-to-workspace 4; }
Mod+Shift+5 { move-column-to-workspace 5; } Mod+Shift+5 { move-column-to-workspace 5; }
Mod+Shift+6 { move-column-to-workspace 6; } Mod+Shift+6 { move-column-to-workspace 6; }

View File

@ -9,6 +9,7 @@
../../../shared/modules/apps/firefox/firefox.nix ../../../shared/modules/apps/firefox/firefox.nix
../../../shared/modules/apps/helix.nix ../../../shared/modules/apps/helix.nix
../../../shared/modules/home-manager/git-autosync.nix ../../../shared/modules/home-manager/git-autosync.nix
../../../shared/modules/home-manager/noctalia.nix
../niri/niri_home.nix ../niri/niri_home.nix
./programs.nix ./programs.nix
]; ];
@ -31,22 +32,19 @@
homePackages = [ ]; 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 # Additional user packages
# Note: Programs with Stylix theming are in programs.nix # Note: Programs with Stylix theming are in programs.nix
home.packages = with pkgs; [ 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 # Gaming
# #
@ -58,18 +56,9 @@
# #
# Unix tools # Unix tools
# #
duf
dust
fd
lsd lsd
ripgrep
tre-command
gtop
htop htop
neofetch
unzip unzip
gnupg
pinentry-tty
# #
# Photo / Video # Photo / Video
@ -158,17 +147,7 @@
}; };
programs = { programs = {
direnv = {
enable = true;
enableZshIntegration = true;
nix-direnv.enable = true;
};
bash.enable = true; bash.enable = true;
delta = {
enable = true;
enableGitIntegration = true;
};
}; };
# enable saving ssh secrets (needed for private repos) # enable saving ssh secrets (needed for private repos)
@ -193,8 +172,6 @@
# integrate ssh-agent from gnome keyring # integrate ssh-agent from gnome keyring
export SSH_AUTH_SOCK=/run/user/$UID/gcr/ssh export SSH_AUTH_SOCK=/run/user/$UID/gcr/ssh
eval "$(direnv hook zsh)"
yt-audio() { yt-audio() {
nix-shell -p yt-dlp --run "yt-dlp -x $1 --audio-format mp3" nix-shell -p yt-dlp --run "yt-dlp -x $1 --audio-format mp3"
} }
@ -205,7 +182,6 @@
alias llm="lsd --timesort --long" alias llm="lsd --timesort --long"
alias lS="lsd --oneline --classic" alias lS="lsd --oneline --classic"
alias lt="lsd --tree --depth=2" alias lt="lsd --tree --depth=2"
alias grep="rg"
alias cat="bat --paging=never" alias cat="bat --paging=never"
alias rm="rm -i" alias rm="rm -i"
''; '';
@ -219,12 +195,13 @@
# Stylix handles Qt and GTK theming # Stylix handles Qt and GTK theming
services.wlsunset = { # Noctalia has built-in night light, so wlsunset is disabled via noctalia module
enable = true; # services.wlsunset = {
sunrise = "07:00"; # enable = true;
sunset = "17:00"; # sunrise = "07:00";
temperature.night = 3500; # sunset = "17:00";
}; # temperature.night = 3500;
# };
services.kdeconnect = { services.kdeconnect = {
enable = true; enable = true;
@ -234,21 +211,19 @@
# Enable bluetooth headphone controls # Enable bluetooth headphone controls
services.mpris-proxy.enable = true; services.mpris-proxy.enable = true;
# SwayOSD - on-screen display for volume, brightness, caps lock # Noctalia replaces SwayOSD and SwayNC - disabled via noctalia module
services.swayosd = { # services.swayosd = {
enable = true; # enable = true;
topMargin = 0.9; # topMargin = 0.9;
}; # };
# services.swaync = {
# SwayNC - notification center (Stylix auto-themes this) # enable = true;
services.swaync = { # settings = {
enable = true; # positionX = "center";
settings = { # positionY = "top";
positionX = "center"; # notification-window-width = 800;
positionY = "top"; # };
notification-window-width = 800; # };
};
};
# Git autosync for Documents # Git autosync for Documents
services.git-autosync = { services.git-autosync = {

View File

@ -71,12 +71,11 @@ in
# foot is in programs.nix for Stylix theming # foot is in programs.nix for Stylix theming
git git
glib # gsettings glib # gsettings
gnome-software # GUI app store for Flatpak
grim grim
kanshi kanshi
libnotify libnotify
lxqt.lxqt-policykit lxqt.lxqt-policykit
man-pages
man-pages-posix
nautilus nautilus
networkmanagerapplet networkmanagerapplet
nwg-drawer nwg-drawer
@ -109,9 +108,6 @@ in
LIBVA_DRIVER_NAME = "iHD"; LIBVA_DRIVER_NAME = "iHD";
}; };
# adds additional man pages
documentation.dev.enable = true;
programs.gamemode = { programs.gamemode = {
enable = true; enable = true;
settings = { 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 in
{ {
options.power_manager = { 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 { settings = mkOption {
type = types.attrs; type = types.attrs;
@ -21,7 +31,7 @@ in
turbo = "auto"; turbo = "auto";
}; };
}; };
description = "Auto-cpufreq configuration settings"; description = "Auto-cpufreq configuration settings (only used with auto-cpufreq backend)";
}; };
enableThermald = mkOption { enableThermald = mkOption {
@ -37,27 +47,38 @@ in
}; };
}; };
config = mkIf cfg.enable { 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;
# Disable TLP regardless of backend (conflicts with both)
services.tlp.enable = mkForce false;
powerManagement.powertop.enable = mkForce false;
}
# auto-cpufreq backend
(mkIf (cfg.backend == "auto-cpufreq") {
services.auto-cpufreq = { services.auto-cpufreq = {
enable = true; enable = true;
settings = cfg.settings; settings = cfg.settings;
}; };
# Supporting services # Disable power-profiles-daemon (conflicts with auto-cpufreq)
services.upower.enable = mkIf cfg.enableUpower true;
services.thermald.enable = mkIf cfg.enableThermald true;
powerManagement.enable = mkIf cfg.enable true;
# Disable conflicting power management services
services.tlp.enable = mkForce false;
services.power-profiles-daemon.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) # Don't set a static CPU governor (let auto-cpufreq handle it)
powerManagement.cpuFreqGovernor = mkForce null; powerManagement.cpuFreqGovernor = mkForce null;
}; })
# # Warning if flake input is missing when expected # power-profiles-daemon backend
# warnings = optional (cfg.useFlake && !(inputs ? auto-cpufreq)) (mkIf (cfg.backend == "power-profiles-daemon") {
# "power_manager: useFlake is enabled but auto-cpufreq flake input not found. Using nixpkgs version instead."; services.power-profiles-daemon.enable = true;
# Disable auto-cpufreq (conflicts with power-profiles-daemon)
services.auto-cpufreq.enable = mkForce false;
})
]);
} }