nixos: add quickshell/waybar/taffybar modules
- Switch taffybar input to the local submodule - Add caelestia quickshell (home-manager module) - Make waybar/taffybar mutually exclusive, defaulting based on xmonad - Move tray ordering and status notifier watcher config into the right modules
This commit is contained in:
Submodule dotfiles/config/taffybar/taffybar updated: 4b01e5b0ce...8e490c8ade
@@ -33,14 +33,17 @@
|
|||||||
./plasma.nix
|
./plasma.nix
|
||||||
./postgres.nix
|
./postgres.nix
|
||||||
./rabbitmq.nix
|
./rabbitmq.nix
|
||||||
|
./quickshell.nix
|
||||||
./secrets.nix
|
./secrets.nix
|
||||||
./ssh.nix
|
./ssh.nix
|
||||||
./sni.nix
|
./sni.nix
|
||||||
./syncthing.nix
|
./syncthing.nix
|
||||||
|
./taffybar.nix
|
||||||
./tts.nix
|
./tts.nix
|
||||||
./user-specific.nix
|
./user-specific.nix
|
||||||
./users.nix
|
./users.nix
|
||||||
./vscode.nix
|
./vscode.nix
|
||||||
|
./waybar.nix
|
||||||
./wsl.nix
|
./wsl.nix
|
||||||
./wyoming.nix
|
./wyoming.nix
|
||||||
./xmonad.nix
|
./xmonad.nix
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
{ inputs, config, pkgs, makeEnable, ... }:
|
{ inputs, config, pkgs, lib, makeEnable, ... }:
|
||||||
makeEnable config "myModules.desktop" true {
|
makeEnable config "myModules.desktop" true {
|
||||||
services.greenclip.enable = true;
|
services.greenclip.enable = true;
|
||||||
imports = [
|
imports = [
|
||||||
@@ -8,6 +8,16 @@ makeEnable config "myModules.desktop" true {
|
|||||||
./xremap.nix
|
./xremap.nix
|
||||||
];
|
];
|
||||||
|
|
||||||
|
assertions = [
|
||||||
|
{
|
||||||
|
assertion = config.myModules.taffybar.enable != config.myModules.waybar.enable;
|
||||||
|
message = "Enable exactly one of myModules.taffybar or myModules.waybar.";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
|
||||||
|
myModules.taffybar.enable = lib.mkDefault config.myModules.xmonad.enable;
|
||||||
|
myModules.waybar.enable = lib.mkDefault (!config.myModules.xmonad.enable);
|
||||||
|
|
||||||
services.xserver = {
|
services.xserver = {
|
||||||
exportConfiguration = true;
|
exportConfiguration = true;
|
||||||
enable = true;
|
enable = true;
|
||||||
|
|||||||
1110
nixos/flake.lock
generated
1110
nixos/flake.lock
generated
File diff suppressed because it is too large
Load Diff
@@ -74,7 +74,7 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
taffybar = {
|
taffybar = {
|
||||||
url = "github:taffybar/taffybar/old-master";
|
url = "path:/home/imalison/dotfiles/dotfiles/config/taffybar/taffybar";
|
||||||
inputs = {
|
inputs = {
|
||||||
nixpkgs.follows = "nixpkgs";
|
nixpkgs.follows = "nixpkgs";
|
||||||
};
|
};
|
||||||
@@ -82,12 +82,12 @@
|
|||||||
|
|
||||||
imalison-taffybar = {
|
imalison-taffybar = {
|
||||||
url = "path:../dotfiles/config/taffybar";
|
url = "path:../dotfiles/config/taffybar";
|
||||||
# inputs = {
|
inputs = {
|
||||||
# nixpkgs.follows = "nixpkgs";
|
nixpkgs.follows = "nixpkgs";
|
||||||
# flake-utils.follows = "flake-utils";
|
flake-utils.follows = "flake-utils";
|
||||||
# xmonad.follows = "xmonad";
|
xmonad.follows = "xmonad";
|
||||||
# taffybar.follows = "taffybar";
|
taffybar.follows = "taffybar";
|
||||||
# };
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
notifications-tray-icon = {
|
notifications-tray-icon = {
|
||||||
@@ -132,7 +132,7 @@
|
|||||||
nixtheplanet.url = "github:matthewcroughan/nixtheplanet";
|
nixtheplanet.url = "github:matthewcroughan/nixtheplanet";
|
||||||
|
|
||||||
codex-cli-nix = {
|
codex-cli-nix = {
|
||||||
url = "github:sadjow/codex-cli-nix";
|
url = "github:colonelpanic8/codex-cli-nix/fix/add-libcap-to-rpath";
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -141,6 +141,11 @@
|
|||||||
inputs.nixpkgs.follows = "nixpkgs";
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
caelestia-shell = {
|
||||||
|
url = "github:caelestia-dots/shell";
|
||||||
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
|
};
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
outputs = inputs @ {
|
outputs = inputs @ {
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
{ config, pkgs, lib, makeEnable, inputs, ... }:
|
{ config, pkgs, makeEnable, inputs, ... }:
|
||||||
makeEnable config "myModules.hyprland" true {
|
makeEnable config "myModules.hyprland" true {
|
||||||
programs.hyprland = {
|
programs.hyprland = {
|
||||||
enable = true;
|
enable = true;
|
||||||
@@ -8,29 +8,6 @@ makeEnable config "myModules.hyprland" true {
|
|||||||
withUWSM = true;
|
withUWSM = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
home-manager.sharedModules = [
|
|
||||||
{
|
|
||||||
programs.waybar.enable = true;
|
|
||||||
|
|
||||||
systemd.user.services.waybar = {
|
|
||||||
Unit = {
|
|
||||||
Description = "Waybar";
|
|
||||||
PartOf = [ "wayland-session@Hyprland.target" ];
|
|
||||||
After = [ "wayland-session@Hyprland.target" ];
|
|
||||||
};
|
|
||||||
Service = {
|
|
||||||
ExecStartPre = "${pkgs.bash}/bin/bash -lc 'uid=$(id -u); for i in $(seq 1 50); do runtime_dir=\"$XDG_RUNTIME_DIR\"; if [ -z \"$runtime_dir\" ]; then runtime_dir=\"/run/user/$uid\"; fi; if [ -n \"$WAYLAND_DISPLAY\" ] && [ -S \"$runtime_dir/$WAYLAND_DISPLAY\" ]; then exit 0; fi; sleep 0.1; done; exit 1'";
|
|
||||||
ExecStart = "${pkgs.waybar}/bin/waybar";
|
|
||||||
Restart = "always";
|
|
||||||
RestartSec = 1;
|
|
||||||
};
|
|
||||||
Install = {
|
|
||||||
WantedBy = [ "wayland-session@Hyprland.target" ];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
];
|
|
||||||
|
|
||||||
# Hyprland-specific packages
|
# Hyprland-specific packages
|
||||||
environment.systemPackages = with pkgs; [
|
environment.systemPackages = with pkgs; [
|
||||||
# Hyprland utilities
|
# Hyprland utilities
|
||||||
|
|||||||
@@ -17,6 +17,7 @@
|
|||||||
myModules.gitea-runner.enable = false;
|
myModules.gitea-runner.enable = false;
|
||||||
myModules.nvidia.enable = true;
|
myModules.nvidia.enable = true;
|
||||||
myModules.electron.enable = true;
|
myModules.electron.enable = true;
|
||||||
|
myModules.quickshell.enable = true;
|
||||||
myModules.wyoming.enable = false;
|
myModules.wyoming.enable = false;
|
||||||
myModules.tts.enable = false;
|
myModules.tts.enable = false;
|
||||||
|
|
||||||
|
|||||||
21
nixos/quickshell.nix
Normal file
21
nixos/quickshell.nix
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
{ config, lib, makeEnable, inputs, ... }:
|
||||||
|
makeEnable config "myModules.quickshell" false {
|
||||||
|
home-manager.sharedModules = [
|
||||||
|
inputs.caelestia-shell.homeManagerModules.default
|
||||||
|
({ lib, nixos, ... }:
|
||||||
|
let
|
||||||
|
hyprlandEnabled = lib.attrByPath ["myModules" "hyprland" "enable"] false nixos.config;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
programs.caelestia = {
|
||||||
|
enable = true;
|
||||||
|
cli.enable = true;
|
||||||
|
systemd.target = lib.mkDefault (
|
||||||
|
if hyprlandEnabled
|
||||||
|
then "wayland-session@Hyprland.target"
|
||||||
|
else "graphical-session.target"
|
||||||
|
);
|
||||||
|
};
|
||||||
|
})
|
||||||
|
];
|
||||||
|
}
|
||||||
@@ -1,7 +1,23 @@
|
|||||||
{ config, makeEnable, ... }:
|
{ config, lib, makeEnable, ... }:
|
||||||
makeEnable config "myModules.sni" true {
|
makeEnable config "myModules.sni" true {
|
||||||
home-manager.sharedModules = [
|
home-manager.sharedModules = [
|
||||||
{
|
{
|
||||||
|
systemd.user.services =
|
||||||
|
let
|
||||||
|
wantGraphicalPre = {
|
||||||
|
Install.WantedBy = lib.mkAfter [ "graphical-session-pre.target" ];
|
||||||
|
};
|
||||||
|
in
|
||||||
|
{
|
||||||
|
blueman-applet = wantGraphicalPre;
|
||||||
|
kdeconnect = wantGraphicalPre;
|
||||||
|
kdeconnect-indicator = wantGraphicalPre;
|
||||||
|
network-manager-applet = wantGraphicalPre;
|
||||||
|
pasystray = wantGraphicalPre;
|
||||||
|
udiskie = wantGraphicalPre;
|
||||||
|
flameshot = wantGraphicalPre;
|
||||||
|
};
|
||||||
|
|
||||||
services.blueman-applet = {
|
services.blueman-applet = {
|
||||||
enable = true;
|
enable = true;
|
||||||
};
|
};
|
||||||
@@ -25,11 +41,6 @@ makeEnable config "myModules.sni" true {
|
|||||||
tray = "always";
|
tray = "always";
|
||||||
};
|
};
|
||||||
|
|
||||||
services.status-notifier-watcher = {
|
|
||||||
enable = true;
|
|
||||||
flags = ["--log-level" "DEBUG"];
|
|
||||||
};
|
|
||||||
|
|
||||||
services.pasystray.enable = true;
|
services.pasystray.enable = true;
|
||||||
|
|
||||||
services.flameshot = {
|
services.flameshot = {
|
||||||
|
|||||||
82
nixos/taffybar.nix
Normal file
82
nixos/taffybar.nix
Normal file
@@ -0,0 +1,82 @@
|
|||||||
|
{ config, inputs, pkgs, makeEnable, ... }:
|
||||||
|
makeEnable config "myModules.taffybar" false {
|
||||||
|
nixpkgs.overlays = with inputs; (
|
||||||
|
if builtins.isList taffybar.overlays
|
||||||
|
then taffybar.overlays
|
||||||
|
else builtins.attrValues taffybar.overlays
|
||||||
|
) ++ [
|
||||||
|
(final: prev: {
|
||||||
|
haskellPackages = prev.haskellPackages.override (old: {
|
||||||
|
overrides = prev.lib.composeExtensions (old.overrides or (_: _: {})) (hself: hsuper: {
|
||||||
|
taffybar = prev.haskell.lib.overrideCabal hsuper.taffybar (oa: {
|
||||||
|
postPatch = (oa.postPatch or "") + ''
|
||||||
|
patch -p1 <<'PATCH'
|
||||||
|
diff --git a/src/System/Taffybar/Widget/HyprlandWorkspaces.hs b/src/System/Taffybar/Widget/HyprlandWorkspaces.hs
|
||||||
|
index 8e0e07a..a40b1a6 100644
|
||||||
|
--- a/src/System/Taffybar/Widget/HyprlandWorkspaces.hs
|
||||||
|
+++ b/src/System/Taffybar/Widget/HyprlandWorkspaces.hs
|
||||||
|
@@ -27,7 +27,7 @@ import Control.Monad.IO.Class (MonadIO(liftIO))
|
||||||
|
import Control.Monad.Trans.Reader (ReaderT, ask, runReaderT)
|
||||||
|
import Data.Aeson (FromJSON(..), eitherDecode', withObject, (.:), (.:?), (.!=))
|
||||||
|
import Data.Char (toLower)
|
||||||
|
-import Data.List (foldl', sortOn, stripSuffix)
|
||||||
|
+import Data.List (foldl', sortOn, stripPrefix)
|
||||||
|
import Data.Maybe (fromMaybe, listToMaybe, mapMaybe)
|
||||||
|
import qualified Data.Map.Strict as M
|
||||||
|
import qualified Data.MultiMap as MM
|
||||||
|
@@ -42,12 +42,11 @@ import StatusNotifier.Tray (scalePixbufToSize)
|
||||||
|
|
||||||
|
import System.Environment.XDG.DesktopEntry
|
||||||
|
( DesktopEntry
|
||||||
|
, deFilename
|
||||||
|
- , getDirectoryEntriesDefault
|
||||||
|
- , getImageForDesktopEntry
|
||||||
|
+ , getDirectoryEntriesDefault
|
||||||
|
)
|
||||||
|
import System.Taffybar.Context
|
||||||
|
import System.Taffybar.Util
|
||||||
|
import System.Taffybar.Widget.Generic.AutoSizeImage (autoSizeImage)
|
||||||
|
-import System.Taffybar.Widget.Util (buildContentsBox, widgetSetClassGI)
|
||||||
|
+import System.Taffybar.Widget.Util (buildContentsBox, getImageForDesktopEntry, widgetSetClassGI)
|
||||||
|
import System.Taffybar.WindowIcon (getWindowIconFromClasses, pixBufFromColor)
|
||||||
|
@@ -316,6 +315,10 @@ normalizeAppId :: String -> String
|
||||||
|
normalizeAppId name =
|
||||||
|
let stripped = fromMaybe name (stripSuffix ".desktop" name)
|
||||||
|
in map toLower stripped
|
||||||
|
+
|
||||||
|
+stripSuffix :: Eq a => [a] -> [a] -> Maybe [a]
|
||||||
|
+stripSuffix suffix xs =
|
||||||
|
+ reverse <$> stripPrefix (reverse suffix) (reverse xs)
|
||||||
|
|
||||||
|
getWindowIconFromDesktopEntryByAppId ::
|
||||||
|
Int32 -> String -> TaffyIO (Maybe Gdk.Pixbuf)
|
||||||
|
PATCH
|
||||||
|
'';
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
})
|
||||||
|
];
|
||||||
|
|
||||||
|
environment.systemPackages = [
|
||||||
|
inputs.imalison-taffybar.defaultPackage.${pkgs.stdenv.hostPlatform.system}
|
||||||
|
];
|
||||||
|
|
||||||
|
home-manager.sharedModules = [
|
||||||
|
{
|
||||||
|
services.status-notifier-watcher.enable = true;
|
||||||
|
|
||||||
|
# Disable kded6's statusnotifierwatcher module so it doesn't race with
|
||||||
|
# the Haskell status-notifier-watcher for the org.kde.StatusNotifierWatcher bus name.
|
||||||
|
xdg.configFile."kded6rc".text = ''
|
||||||
|
[Module-statusnotifierwatcher]
|
||||||
|
autoload=false
|
||||||
|
'';
|
||||||
|
|
||||||
|
services.taffybar = {
|
||||||
|
enable = true;
|
||||||
|
package = inputs.imalison-taffybar.defaultPackage.${pkgs.stdenv.hostPlatform.system};
|
||||||
|
};
|
||||||
|
}
|
||||||
|
];
|
||||||
|
}
|
||||||
26
nixos/waybar.nix
Normal file
26
nixos/waybar.nix
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
{ config, pkgs, makeEnable, ... }:
|
||||||
|
makeEnable config "myModules.waybar" false {
|
||||||
|
home-manager.sharedModules = [
|
||||||
|
{
|
||||||
|
programs.waybar.enable = true;
|
||||||
|
|
||||||
|
systemd.user.services.waybar = {
|
||||||
|
Unit = {
|
||||||
|
Description = "Waybar";
|
||||||
|
PartOf = [ "wayland-session@Hyprland.target" "tray.target" ];
|
||||||
|
After = [ "wayland-session@Hyprland.target" "tray.target" ];
|
||||||
|
Wants = [ "tray.target" ];
|
||||||
|
};
|
||||||
|
Service = {
|
||||||
|
ExecStartPre = "${pkgs.bash}/bin/bash -lc 'uid=$(id -u); runtime_dir=\"$XDG_RUNTIME_DIR\"; if [ -z \"$runtime_dir\" ]; then runtime_dir=\"/run/user/$uid\"; fi; for i in $(seq 1 50); do if [ -n \"$WAYLAND_DISPLAY\" ] && [ -S \"$runtime_dir/$WAYLAND_DISPLAY\" ]; then found=1; break; fi; sleep 0.1; done; if [ -z \"$found\" ]; then exit 1; fi; \"$HOME/.config/waybar/scripts/render-config\"'";
|
||||||
|
ExecStart = "${pkgs.waybar}/bin/waybar -c %t/waybar/config.jsonc -s %t/waybar/style.css";
|
||||||
|
Restart = "always";
|
||||||
|
RestartSec = 1;
|
||||||
|
};
|
||||||
|
Install = {
|
||||||
|
WantedBy = [ "wayland-session@Hyprland.target" ];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
|
];
|
||||||
|
}
|
||||||
@@ -5,7 +5,7 @@ makeEnable config "myModules.xmonad" true {
|
|||||||
xmonad-contrib.overlay
|
xmonad-contrib.overlay
|
||||||
notifications-tray-icon.overlay
|
notifications-tray-icon.overlay
|
||||||
(import ../dotfiles/config/xmonad/overlay.nix)
|
(import ../dotfiles/config/xmonad/overlay.nix)
|
||||||
] ++ taffybar.overlays;
|
];
|
||||||
|
|
||||||
services.rumno.enable = true;
|
services.rumno.enable = true;
|
||||||
|
|
||||||
@@ -29,20 +29,13 @@ makeEnable config "myModules.xmonad" true {
|
|||||||
haskellPackages.imalison-xmonad
|
haskellPackages.imalison-xmonad
|
||||||
# haskellPackages.notifications-tray-icon
|
# haskellPackages.notifications-tray-icon
|
||||||
# haskellPackages.gtk-sni-tray
|
# haskellPackages.gtk-sni-tray
|
||||||
haskellPackages.status-notifier-item
|
|
||||||
haskellPackages.dbus-hslogger
|
haskellPackages.dbus-hslogger
|
||||||
inputs.imalison-taffybar.defaultPackage."${pkgs.stdenv.hostPlatform.system}"
|
|
||||||
];
|
];
|
||||||
|
|
||||||
home-manager.sharedModules = [
|
home-manager.sharedModules = [
|
||||||
{
|
{
|
||||||
imports = [ ./dunst.nix ];
|
imports = [ ./dunst.nix ];
|
||||||
|
|
||||||
services.taffybar = {
|
|
||||||
enable = true;
|
|
||||||
package = inputs.imalison-taffybar.defaultPackage."${pkgs.stdenv.hostPlatform.system}";
|
|
||||||
};
|
|
||||||
|
|
||||||
services.autorandr.enable = true;
|
services.autorandr.enable = true;
|
||||||
|
|
||||||
services.random-background = {
|
services.random-background = {
|
||||||
|
|||||||
Reference in New Issue
Block a user