Compare commits

..
14 changed files with 125 additions and 397 deletions
+6 -14
View File
@@ -2,7 +2,7 @@
"layer": "top", "layer": "top",
"modules-left": ["sway/workspaces"], "modules-left": ["sway/workspaces"],
"modules-center": ["clock"], "modules-center": ["clock"],
"modules-right": ["custom/playerctl", "custom/weather", "pulseaudio", "custom/network", "custom/ollama", "tray"], "modules-right": ["custom/playerctl", "custom/weather", "pulseaudio", "network", "tray"],
"sway/workspaces": { "sway/workspaces": {
"disable-scroll": true, "disable-scroll": true,
"all-outputs": true, "all-outputs": true,
@@ -34,22 +34,14 @@
"exec": "wttrbar --fahrenheit --main-indicator 'temp_F' --location 'Grand Rapids'", "exec": "wttrbar --fahrenheit --main-indicator 'temp_F' --location 'Grand Rapids'",
"return-type": "json" "return-type": "json"
}, },
"custom/network": { "network": {
"format": "{text}", "format-wifi": " {essid} ({signalStrength}%)",
"return-type": "json", "format-ethernet": " {ipaddr}",
"exec": "bash $HOME/.config/waybar/network.sh", "format-disconnected": "⚠ Disconnected",
"on-click": "bash $HOME/.config/waybar/network.sh toggle", "family": "ipv4",
"interval": 5, "interval": 5,
"tooltip": false "tooltip": false
}, },
"custom/ollama": {
"format": "{text}",
"return-type": "json",
"exec": "bash $HOME/.config/waybar/ollama.sh",
"on-click": "bash $HOME/.config/waybar/ollama.sh toggle",
"interval": 2,
"tooltip": true
},
"pulseaudio": { "pulseaudio": {
"format": "{icon} {volume}%", "format": "{icon} {volume}%",
"format-bluetooth": "{icon} {volume}%", "format-bluetooth": "{icon} {volume}%",
-54
View File
@@ -1,54 +0,0 @@
#!/usr/bin/env bash
set -u
state_dir="${XDG_RUNTIME_DIR:-/tmp}/waybar-${UID}"
state_file="$state_dir/public-ip"
if [[ ${1:-} == toggle ]]; then
mkdir -p -m 700 "$state_dir"
if [[ -s $state_file ]]; then
: > "$state_file"
else
public_ip=$(curl -4fsS --max-time 5 https://wtfismyip.com/json 2>/dev/null |
jq -er '.YourFuckingIPAddress | select(type == "string") | split(".") |
select(length == 4 and all(.[]; test("^[0-9]{1,3}$") and (tonumber <= 255))) |
join(".")' 2>/dev/null) || exit 0
printf '%s\n' "$public_ip" > "$state_file"
fi
exit 0
fi
route=$(ip -4 route get 1.1.1.1 2>/dev/null) || route=
if [[ ! $route =~ [[:space:]]dev[[:space:]]([^[:space:]]+) ]]; then
jq -cn '{text: "⚠ Disconnected", class: "disconnected"}'
exit 0
fi
interface=${BASH_REMATCH[1]}
if [[ ! $route =~ [[:space:]]src[[:space:]]([0-9.]+) ]]; then
jq -cn '{text: "⚠ Disconnected", class: "disconnected"}'
exit 0
fi
local_ip=${BASH_REMATCH[1]}
if [[ -s $state_file ]]; then
jq -cn --rawfile ip "$state_file" '{text: (" " + ($ip | rtrimstr("\n"))), class: "public"}'
exit 0
fi
if [[ $(nmcli -g GENERAL.TYPE device show "$interface" 2>/dev/null) == wifi ]]; then
essid=$(nmcli -g GENERAL.CONNECTION device show "$interface" 2>/dev/null | head -n 1)
signal=$(nmcli -t -f IN-USE,SIGNAL device wifi list ifname "$interface" --rescan no 2>/dev/null |
awk -F: '$1 == "*" { print $2; exit }')
if [[ -n $essid && $essid != -- ]]; then
text="$essid"
[[ -n $signal ]] && text="${text} (${signal}%)"
else
text="$local_ip"
fi
else
text="$local_ip"
fi
jq -cn --arg text "$text" '{text: $text, class: "connected"}'
-24
View File
@@ -1,24 +0,0 @@
#!/usr/bin/env bash
set -u
service=ollama.service
# The shared Waybar config is also used by hosts without Ollama.
if ! systemctl --user cat "$service" >/dev/null 2>&1; then
exit 0
fi
if [[ ${1:-} == toggle ]]; then
if systemctl --user is-active --quiet "$service"; then
systemctl --user stop "$service"
else
systemctl --user start "$service"
fi
exit $?
fi
if systemctl --user is-active --quiet "$service"; then
printf '%s\n' '{"text":"<span foreground=\"#9ece6a\">●</span> Local AI","tooltip":"Ollama is running. Click to stop it.","class":"running"}'
else
printf '%s\n' '{"text":"<span foreground=\"#f7768e\">●</span> Local AI","tooltip":"Ollama is stopped. Click to start it.","class":"stopped"}'
fi
+3 -4
View File
@@ -31,12 +31,11 @@ window#waybar {
#cpu, #cpu,
#memory, #memory,
#pulseaudio, #pulseaudio,
#custom-network, #network,
#custom-ollama,
#battery, #battery,
#clock, #clock,
#custom-playerctl { #custom-playerctl {
padding: 0 5px; padding: 0 10px;
margin: 0 5px; margin: 0 5px;
} }
@@ -66,7 +65,7 @@ window#waybar {
animation-direction: alternate; animation-direction: alternate;
} }
#custom-network.disconnected { #network.disconnected {
color: #cc241d; color: #cc241d;
} }
Generated
+45 -45
View File
@@ -32,11 +32,11 @@
"rust-overlay": "rust-overlay_2" "rust-overlay": "rust-overlay_2"
}, },
"locked": { "locked": {
"lastModified": 1790492877, "lastModified": 1791702392,
"narHash": "sha256-RK9eeRQv9l3pQ8qNCdJ8fpkFCp/+QpNn7lR7Kkfrv8w=", "narHash": "sha256-8uWZP3UiJBtYzBzazI18WvlshKYHxPb+8aqm02OxL5M=",
"ref": "refs/heads/master", "ref": "refs/heads/master",
"rev": "d3216bbe660f8265f1393ecf263ab5f8662f5a58", "rev": "ee2a27ad749d6d774e26c2be5de5f3a5ecd4a93f",
"revCount": 26, "revCount": 28,
"type": "git", "type": "git",
"url": "https://scm.wyattjmiller.com/wymiller/caitsith.git" "url": "https://scm.wyattjmiller.com/wymiller/caitsith.git"
}, },
@@ -267,11 +267,11 @@
"nixpkgs": "nixpkgs" "nixpkgs": "nixpkgs"
}, },
"locked": { "locked": {
"lastModified": 1790872110, "lastModified": 1792166485,
"narHash": "sha256-dXrMwUGE/9pT0J7MeW1BuYxpnnPPc52/oLxfqQF/5q8=", "narHash": "sha256-TL2RJ56FbBQNi6vsCXAn7QhZECh5DPbvzfiX6v+4r1A=",
"owner": "purpleclay", "owner": "purpleclay",
"repo": "go-overlay", "repo": "go-overlay",
"rev": "8e136930a2a34c501d612f7b7b0ee8806531768f", "rev": "5971ffb6c5de960d37f3b85c53cb5a30387cd05a",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -290,11 +290,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1790872110, "lastModified": 1792166485,
"narHash": "sha256-dXrMwUGE/9pT0J7MeW1BuYxpnnPPc52/oLxfqQF/5q8=", "narHash": "sha256-TL2RJ56FbBQNi6vsCXAn7QhZECh5DPbvzfiX6v+4r1A=",
"owner": "purpleclay", "owner": "purpleclay",
"repo": "go-overlay", "repo": "go-overlay",
"rev": "8e136930a2a34c501d612f7b7b0ee8806531768f", "rev": "5971ffb6c5de960d37f3b85c53cb5a30387cd05a",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -313,11 +313,11 @@
"rust-overlay": "rust-overlay_3" "rust-overlay": "rust-overlay_3"
}, },
"locked": { "locked": {
"lastModified": 1790492923, "lastModified": 1791702441,
"narHash": "sha256-pi8p2jRW9pprb0ZFH50/Z9Bxv0bKgddMXbLZ0D03L3w=", "narHash": "sha256-qHf8tVIYu6OE1PKcthmpBgblg27u3bU7v4TVqy0B3jg=",
"ref": "refs/heads/master", "ref": "refs/heads/master",
"rev": "580082101efc0807637529e539886ee6c5f95672", "rev": "2c2e99f6347e9be744a72f7df6043015989d6cd7",
"revCount": 15, "revCount": 17,
"type": "git", "type": "git",
"url": "https://scm.wyattjmiller.com/wymiller/hildibrand.git" "url": "https://scm.wyattjmiller.com/wymiller/hildibrand.git"
}, },
@@ -333,11 +333,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1790996401, "lastModified": 1792274446,
"narHash": "sha256-f+kOxEmOUnQazVAmGg0i8hzwgd1kX/geY+k/Dpheye8=", "narHash": "sha256-AM1HmBeDnB2B3dSiXuCYeu7Me+lHNpz/P39lVxGJBuQ=",
"owner": "nix-community", "owner": "nix-community",
"repo": "home-manager", "repo": "home-manager",
"rev": "db7d5e2332710f5abb088f6b5de927d7f9511b35", "rev": "ab3823b4b24c0c3ca984c1f3ee577fd6d667424c",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -355,11 +355,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1790989254, "lastModified": 1792098797,
"narHash": "sha256-ZN+riaeFuE+DZ5zfqJiXlM12jLwZzeIXiNkU1YeHMXI=", "narHash": "sha256-u4DIIZgznEGzByxXrxWCXK19VcMtTBmi/M9gZ7Jk9bM=",
"owner": "nix-community", "owner": "nix-community",
"repo": "home-manager", "repo": "home-manager",
"rev": "acd21c5a3420a9d5fd0ed06299b10828267ef9ba", "rev": "640725978b99076e18e069f6e7d2959124584f8f",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -417,11 +417,11 @@
}, },
"nixpkgs_2": { "nixpkgs_2": {
"locked": { "locked": {
"lastModified": 1790920529, "lastModified": 1792030654,
"narHash": "sha256-nQyFkMR78WP6PiXKkDW2SjqzLf/spQqjRuxRGSbcV8k=", "narHash": "sha256-OaQwAtPMTjQiY2sT/2/62UbSPhzP/0aDnWzMm/NCiUw=",
"owner": "nixos", "owner": "nixos",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "774debe7a0d1b496e35677ad955a1011c6ff74f3", "rev": "26f4107e47e3ad0ffd0db220469ba83b6f6d96e8",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -433,11 +433,11 @@
}, },
"nixpkgs_3": { "nixpkgs_3": {
"locked": { "locked": {
"lastModified": 1790920529, "lastModified": 1792030654,
"narHash": "sha256-nQyFkMR78WP6PiXKkDW2SjqzLf/spQqjRuxRGSbcV8k=", "narHash": "sha256-OaQwAtPMTjQiY2sT/2/62UbSPhzP/0aDnWzMm/NCiUw=",
"owner": "NixOS", "owner": "NixOS",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "774debe7a0d1b496e35677ad955a1011c6ff74f3", "rev": "26f4107e47e3ad0ffd0db220469ba83b6f6d96e8",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -487,11 +487,11 @@
"rust-overlay": "rust-overlay_4" "rust-overlay": "rust-overlay_4"
}, },
"locked": { "locked": {
"lastModified": 1791097561, "lastModified": 1792344577,
"narHash": "sha256-AmeVVy0WbW/y/sZv7ZGYn3dY6HuHPqvUgYorahAe4lM=", "narHash": "sha256-Sbd2veIdg9iDiwwDeEKIiuk8FYMtjBXWvDlrrM0FjVA=",
"ref": "refs/heads/master", "ref": "refs/heads/master",
"rev": "55e8c40fbcd0c848c38002fdefb37de7084715be", "rev": "2debafc63297a24d2ca5c749b0d3f6bdbf6324cb",
"revCount": 107, "revCount": 113,
"type": "git", "type": "git",
"url": "https://scm.wyattjmiller.com/wymiller/nur.git" "url": "https://scm.wyattjmiller.com/wymiller/nur.git"
}, },
@@ -507,11 +507,11 @@
"nixpkgs": "nixpkgs_4" "nixpkgs": "nixpkgs_4"
}, },
"locked": { "locked": {
"lastModified": 1790797021, "lastModified": 1792175215,
"narHash": "sha256-H2vA5yUaS58Wtdp46piMbRqSQe3Qn716i/oZPYoyhp8=", "narHash": "sha256-XD64JVLV8iE4lR+W5gkTweEaT+SBwOrSy0+le2WgITI=",
"owner": "notashelf", "owner": "notashelf",
"repo": "nvf", "repo": "nvf",
"rev": "2477cb0a5f394df36ddc72867c2657225d93d157", "rev": "a736b60b1e2019931168979951c94dc46e342957",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -563,11 +563,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1790407471, "lastModified": 1791620365,
"narHash": "sha256-M8elY2UShg4ZuLTiRLEHO+ae5xQFp3/ReQdxp/R+1UU=", "narHash": "sha256-CVZXIDNw7HEwyD8X6q9Ln370Sc0ZqRlTzDRwOZ1hJMY=",
"owner": "oxalica", "owner": "oxalica",
"repo": "rust-overlay", "repo": "rust-overlay",
"rev": "4e9bb05a9ab6c37dc74c22974ebed6e36dc73eb2", "rev": "e90fafa71b440fabcd52dd7fb017ab2da81c781a",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -585,11 +585,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1790407471, "lastModified": 1791620365,
"narHash": "sha256-M8elY2UShg4ZuLTiRLEHO+ae5xQFp3/ReQdxp/R+1UU=", "narHash": "sha256-CVZXIDNw7HEwyD8X6q9Ln370Sc0ZqRlTzDRwOZ1hJMY=",
"owner": "oxalica", "owner": "oxalica",
"repo": "rust-overlay", "repo": "rust-overlay",
"rev": "4e9bb05a9ab6c37dc74c22974ebed6e36dc73eb2", "rev": "e90fafa71b440fabcd52dd7fb017ab2da81c781a",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -606,11 +606,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1791013993, "lastModified": 1792219666,
"narHash": "sha256-BiFPwFsbFnZH5GfWbQFKYuQNg+67aNQCoRSRNTeJFQc=", "narHash": "sha256-RMO08tKD+hFIL5ryWi85VY4aHE5oIpdV1h4kVFctOkw=",
"owner": "oxalica", "owner": "oxalica",
"repo": "rust-overlay", "repo": "rust-overlay",
"rev": "7470661ba2b51156048af08464b82020223dc942", "rev": "a110337465cfb76e3806b81b9db3094c3e6e770a",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -624,11 +624,11 @@
"nixpkgs": "nixpkgs_5" "nixpkgs": "nixpkgs_5"
}, },
"locked": { "locked": {
"lastModified": 1791013993, "lastModified": 1792307278,
"narHash": "sha256-BiFPwFsbFnZH5GfWbQFKYuQNg+67aNQCoRSRNTeJFQc=", "narHash": "sha256-wJgFFtw/vlzsjWrQFmTn40TTkSkqHM4XXN0nh4q4uMk=",
"owner": "oxalica", "owner": "oxalica",
"repo": "rust-overlay", "repo": "rust-overlay",
"rev": "7470661ba2b51156048af08464b82020223dc942", "rev": "42076d1c6a0fb405ed04f9a674e4a8f69de62ba3",
"type": "github" "type": "github"
}, },
"original": { "original": {
+14
View File
@@ -1,6 +1,7 @@
{ lib { lib
, pkgs , pkgs
, userName , userName
, isNixOS ? true
, ... , ...
}: let }: let
# Have a file sturcture that holds all the configuration files that can't be configured by Nix # Have a file sturcture that holds all the configuration files that can't be configured by Nix
@@ -30,6 +31,19 @@ in
stateVersion = "24.11"; stateVersion = "24.11";
} }
(lib.mkIf isNixOS {
sessionVariables = {
XDG_CURRENT_DESKTOP = "sway";
XDG_SESSION_TYPE = "wayland";
XDG_SESSION_DESKTOP = "sway";
XDG_CONFIG_HOME = "$HOME/.config";
XDG_CACHE_HOME = "$HOME/.cache";
XDG_DATA_HOME = "$HOME/.local/share";
XDG_STATE_HOME = "$HOME/.local/state";
NIXOS_OZONE_WL = "1";
};
})
(lib.mkIf pkgs.stdenv.isLinux { (lib.mkIf pkgs.stdenv.isLinux {
pointerCursor = { pointerCursor = {
gtk.enable = true; gtk.enable = true;
+1 -4
View File
@@ -27,10 +27,7 @@
enable = true; enable = true;
lsp.servers = [ "typescript-language-server" "deno" ]; lsp.servers = [ "typescript-language-server" "deno" ];
}; };
csharp = { csharp.enable = true;
enable = true;
lsp.servers = [ "omnisharp" ];
};
}; };
utility.surround.enable = true; utility.surround.enable = true;
+8 -2
View File
@@ -66,8 +66,14 @@
"The gods themselves will be my meal. Your dear companions my dessert. Upon this world I'll feast, and death shall follow in my wake. All your hate, all your rage, you will render unto me." \ "The gods themselves will be my meal. Your dear companions my dessert. Upon this world I'll feast, and death shall follow in my wake. All your hate, all your rage, you will render unto me." \
"Boring, boring, boring" \ "Boring, boring, boring" \
"Would you be 'happier' had I a 'good reason'?" \ "Would you be 'happier' had I a 'good reason'?" \
"A test of your reflexes!" "A test of your reflexes!" \
"Yer a wizard, Wyatt" \
"Yer a lizard, Wyatt" \
"Po-Tay-To boil em mash em stick em in a stew" \
"Oh look it's the cutie patootie potato!"
"What a charming young man" \
"Wyatt, you are smart, kind, and resilient. I believe in you no matter what life throws at you! Kick this project's butt!! - Nico" \
"Ganbatte!"
set choose_meme (random)"%"(count $memes) set choose_meme (random)"%"(count $memes)
set choose_meme $memes[(math $choose_meme"+1")] set choose_meme $memes[(math $choose_meme"+1")]
+1 -5
View File
@@ -36,10 +36,6 @@ in {
xdg.configFile."sway/config".source = lib.mkForce (dirs.defaults + /sway/config); xdg.configFile."sway/config".source = lib.mkForce (dirs.defaults + /sway/config);
xdg.configFile."waybar/config".source = lib.mkForce (dirs.defaults + /waybar/config); xdg.configFile."waybar/config".source = lib.mkForce (dirs.defaults + /waybar/config);
xdg.configFile."waybar/style.css".source = lib.mkForce (dirs.defaults + /waybar/style.css); xdg.configFile."waybar/style.css".source = lib.mkForce (dirs.defaults + /waybar/style.css);
xdg.configFile."waybar/network.sh".source = dirs.defaults + /waybar/network.sh;
xdg.configFile."waybar/ollama.sh".source = dirs.defaults + /waybar/ollama.sh;
home.packages = with pkgs; [ curl iproute2 networkmanager ];
programs.wofi = { programs.wofi = {
enable = pkgs.stdenv.isLinux; enable = pkgs.stdenv.isLinux;
@@ -157,6 +153,6 @@ in {
programs.waybar = { programs.waybar = {
enable = pkgs.stdenv.isLinux; enable = pkgs.stdenv.isLinux;
systemd.enable = false; systemd.enable = true;
}; };
} }
View File
-178
View File
@@ -1,178 +0,0 @@
{
config,
lib,
pkgs,
...
}: let
cfg = config.desktop;
defaultWaylandPackages = with pkgs; [
brightnessctl
cliphist
foot
grim
libnotify
mako
networkmanagerapplet
playerctl
polkit_gnome
pavucontrol
rofi
slurp
waybar
wl-clipboard
xdg-utils
];
defaultSwayPackages =
defaultWaylandPackages
++ (with pkgs; [
pulseaudio
swayidle
swaylock
wmenu
]);
resolvedDisplayManager =
if cfg.displayManager != "auto"
then cfg.displayManager
else if cfg.gnome.enable
then "gdm"
else if cfg.xfce.enable
then "lightdm"
else "none";
in {
imports = [./xdg.nix];
options.desktop = {
displayManager = lib.mkOption {
type = lib.types.enum ["auto" "none" "gdm" "lightdm" "ly"];
default = "auto";
description = ''
Display manager to enable. In auto mode, GDM is used when GNOME is
enabled, LightDM is used when XFCE is enabled, and no display manager
is enabled for compositor-only configurations.
'';
};
gnome.enable = lib.mkEnableOption "the vanilla GNOME desktop environment";
xfce.enable = lib.mkEnableOption "the vanilla XFCE desktop environment";
sway = {
enable = lib.mkEnableOption "the Sway Wayland compositor";
extraPackages = lib.mkOption {
type = with lib.types; listOf package;
default = defaultSwayPackages;
defaultText = lib.literalExpression ''
with pkgs; [
brightnessctl
cliphist
foot
grim
libnotify
mako
networkmanagerapplet
playerctl
polkit_gnome
pulseaudio
pavucontrol
rofi
slurp
swayidle
swaylock
waybar
wl-clipboard
wmenu
xdg-utils
]
'';
description = "Packages installed alongside Sway.";
};
};
hyprland = {
enable = lib.mkEnableOption "the Hyprland Wayland compositor";
extraPackages = lib.mkOption {
type = with lib.types; listOf package;
default = defaultWaylandPackages;
defaultText = lib.literalExpression ''
with pkgs; [
brightnessctl
cliphist
foot
grim
libnotify
mako
networkmanagerapplet
playerctl
polkit_gnome
pavucontrol
rofi
slurp
waybar
wl-clipboard
xdg-utils
]
'';
description = ''
Packages installed alongside Hyprland. Hyprlock and Hypridle are
enabled separately so their NixOS integration, including PAM, is
configured as well.
'';
};
};
};
config = lib.mkMerge [
(lib.mkIf cfg.gnome.enable {
services.desktopManager.gnome.enable = true;
})
(lib.mkIf cfg.xfce.enable {
services.xserver = {
enable = true;
desktopManager.xfce.enable = true;
};
})
(lib.mkIf cfg.sway.enable {
programs.sway = {
enable = true;
wrapperFeatures.gtk = true;
extraPackages = cfg.sway.extraPackages;
extraSessionCommands = ''
export XDG_SESSION_TYPE=wayland
export XDG_SESSION_DESKTOP=sway
export NIXOS_OZONE_WL=1
'';
};
})
(lib.mkIf cfg.hyprland.enable {
programs = {
hyprland.enable = true;
hyprlock.enable = lib.mkDefault true;
};
environment.systemPackages = cfg.hyprland.extraPackages;
})
(lib.mkIf (resolvedDisplayManager == "gdm") {
services.displayManager.gdm.enable = true;
})
(lib.mkIf (resolvedDisplayManager == "lightdm") {
services.xserver = {
enable = true;
displayManager.lightdm.enable = true;
};
})
(lib.mkIf (resolvedDisplayManager == "ly") {
services.displayManager.ly.enable = true;
})
];
}
-49
View File
@@ -1,49 +0,0 @@
{
config,
lib,
pkgs,
...
}: let
cfg = config.desktop;
needsGtkPortal = cfg.xfce.enable || cfg.hyprland.enable;
usesPortal = cfg.gnome.enable || cfg.xfce.enable || cfg.sway.enable || cfg.hyprland.enable;
in {
config = lib.mkMerge [
# GNOME and Sway configure their own portals in NixOS. XFCE needs a
# portal; Hyprland benefits from GTK as a fallback to its native one.
(lib.mkIf needsGtkPortal {
xdg.portal = {
enable = true;
extraPortals = [pkgs.xdg-desktop-portal-gtk];
};
})
(lib.mkIf (cfg.sway.enable || needsGtkPortal) {
xdg.portal.config.common.default = ["gtk"];
})
(lib.mkIf cfg.sway.enable {
xdg.portal.wlr.settings.screencast = {
chooser_type = "dmenu";
chooser_cmd = "${pkgs.wmenu}/bin/wmenu -l 10 -p 'Select screen to share:'";
};
})
(lib.mkIf (usesPortal && config.services.gnome.gnome-keyring.enable) {
xdg.portal.config.common."org.freedesktop.impl.portal.Secret" = ["gnome-keyring"];
})
(lib.mkIf (cfg.sway.enable && config.services.gnome.gnome-keyring.enable) {
xdg.portal.config.sway."org.freedesktop.impl.portal.Secret" = ["gnome-keyring"];
})
# A per-desktop config takes precedence over Hyprland's packaged config,
# so include its native portal whenever adding a Secret preference.
(lib.mkIf (cfg.hyprland.enable && config.services.gnome.gnome-keyring.enable) {
xdg.portal.config.hyprland = {
default = ["hyprland" "gtk"];
"org.freedesktop.impl.portal.Secret" = ["gnome-keyring"];
};
})
];
}
+26 -18
View File
@@ -22,7 +22,6 @@ in {
}) })
../../apps/gaming.nix ../../apps/gaming.nix
../../apps/appimage.nix ../../apps/appimage.nix
../../desktop
../../graphics ../../graphics
../../pwrMgmt ../../pwrMgmt
../../networking/core.nix ../../networking/core.nix
@@ -75,6 +74,7 @@ in {
brightnessctl brightnessctl
wttrbar wttrbar
cliphist cliphist
xdg-desktop-portal-gtk
xdg-utils xdg-utils
flatpak-xdg-utils flatpak-xdg-utils
desktop-file-utils desktop-file-utils
@@ -86,25 +86,9 @@ in {
vlc vlc
]; ];
systemd.user.services.ollama = {
description = "Ollama local AI server";
serviceConfig = {
ExecStart = "${pkgs.ollama-rocm}/bin/ollama serve";
Restart = "on-failure";
Environment = [
"OLLAMA_HOST=0.0.0.0:11434"
"OLLAMA_CONTEXT_LENGTH=64000"
];
};
};
# Enable Polkit # Enable Polkit
security.polkit.enable = true; security.polkit.enable = true;
# Enable desktop support (sway)
desktop.sway.enable = true;
desktop.displayManager = "ly";
# Graphics module (../../graphics/default.nix) # Graphics module (../../graphics/default.nix)
graphics = { graphics = {
enable = true; enable = true;
@@ -167,7 +151,10 @@ in {
# Core networking module (see ../../networking/core.nix) # Core networking module (see ../../networking/core.nix)
network = { network = {
firewall.enable = true; firewall = {
enable = true;
firewalld.enable = true;
};
networkManager.enable = true; networkManager.enable = true;
}; };
@@ -205,6 +192,27 @@ in {
# AppImage support # AppImage support
appimage.enable = true; appimage.enable = true;
# XDG stuff
xdg = {
portal = {
enable = true;
config = {
sway = {
default = ["wlr" "gtk"];
"org.freedesktop.impl.portal.Secret" = ["gnome-keyring"];
};
common = {
default = ["gtk"];
"org.freedesktop.impl.portal.Secret" = ["gnome-keyring"];
};
};
extraPortals = with pkgs; [
xdg-desktop-portal-wlr
xdg-desktop-portal-gtk
];
};
};
# sched_ext userspace CPU scheduling stuff - idk # sched_ext userspace CPU scheduling stuff - idk
services.scx = { services.scx = {
enable = true; enable = true;
+21
View File
@@ -8,6 +8,12 @@ in {
options.network = { options.network = {
firewall = { firewall = {
enable = lib.mkEnableOption "system firewall"; enable = lib.mkEnableOption "system firewall";
firewalld.enable = lib.mkEnableOption "firewalld with its nftables backend";
nftables.extraConfig = lib.mkOption {
type = lib.types.lines;
default = "";
description = "Rules inside a separate inet nftables table alongside firewalld";
};
tcpPorts = { tcpPorts = {
ssh.enable = lib.mkEnableOption "SSH service port (22)"; ssh.enable = lib.mkEnableOption "SSH service port (22)";
web.enable = lib.mkEnableOption "common web service ports (80, 443)"; web.enable = lib.mkEnableOption "common web service ports (80, 443)";
@@ -42,6 +48,21 @@ in {
}; };
}; };
config = { config = {
assertions = [
{
assertion = cfg.firewall.nftables.extraConfig == "" || cfg.firewall.firewalld.enable;
message = "network.firewall.nftables.extraConfig requires network.firewall.firewalld.enable";
}
];
services.firewalld.enable = cfg.firewall.firewalld.enable;
networking.nftables = lib.mkIf cfg.firewall.firewalld.enable {
enable = true;
flushRuleset = false;
tables."local-extra" = lib.mkIf (cfg.firewall.nftables.extraConfig != "") {
family = "inet";
content = cfg.firewall.nftables.extraConfig;
};
};
networking.firewall = { networking.firewall = {
enable = cfg.firewall.enable; enable = cfg.firewall.enable;
allowedTCPPorts = lib.flatten [ allowedTCPPorts = lib.flatten [