aboutsummaryrefslogtreecommitdiff
path: root/modules/hosts/desktop/labwc
diff options
context:
space:
mode:
authorLeander Scherer <leander@schererleander.de>2026-01-08 02:48:11 +0100
committerLeander Scherer <leander@schererleander.de>2026-01-08 19:08:12 +0100
commit6174f3650cf42aaf008012e828d5a1f8e2ce037f (patch)
tree9bbbd99680cd5adb56596a14734d4896bc6af733 /modules/hosts/desktop/labwc
parentc582c4d0675aada46fa196b7af1941ed753d055f (diff)
refactor(modules): separate nixos/home-manager modules, use standard option conventions
Diffstat (limited to 'modules/hosts/desktop/labwc')
-rw-r--r--modules/hosts/desktop/labwc/default.nix155
-rw-r--r--modules/hosts/desktop/labwc/sfwbar.nix142
2 files changed, 297 insertions, 0 deletions
diff --git a/modules/hosts/desktop/labwc/default.nix b/modules/hosts/desktop/labwc/default.nix
new file mode 100644
index 0000000..fd7c062
--- /dev/null
+++ b/modules/hosts/desktop/labwc/default.nix
@@ -0,0 +1,155 @@
+{
+ config,
+ username,
+ pkgs,
+ lib,
+ ...
+}:
+
+let
+ inherit (lib) mkEnableOption mkIf;
+ cfg = config.nx.desktop.labwc;
+
+ gruvbox-openbox = pkgs.stdenv.mkDerivation {
+ pname = "gruvbox-openbox";
+ version = "0-unstable-2024-02-14";
+
+ src = pkgs.fetchFromGitHub {
+ owner = "nathanielevan";
+ repo = "gruvbox-openbox";
+ rev = "master";
+ hash = "sha256-61BsD/DK6OOJLKwdY03HL1pCG1DJcIE9bsFPAVFfcIY=";
+ };
+
+ installPhase = ''
+ mkdir -p $out/share/themes
+ cp -r gruvbox-dark $out/share/themes/
+ cp -r gruvbox-material-dark $out/share/themes/
+ cp -r gruvbox-material-dark-blocks $out/share/themes/
+ '';
+ };
+in
+{
+ imports = [
+ ./sfwbar.nix
+ ];
+
+ options.nx.desktop.labwc.enable = mkEnableOption "Enable labwc";
+ config = mkIf cfg.enable {
+ home-manager.users.${username} = {
+ home.packages = with pkgs; [
+ labwc-tweaks
+ labwc-gtktheme
+ gruvbox-material-gtk-theme
+ gruvbox-dark-icons-gtk
+ swaybg
+ wl-clipboard
+
+ gruvbox-openbox
+ ];
+
+ services.cliphist.enable = true;
+
+ gtk = {
+ enable = true;
+ theme = {
+ name = "Gruvbox-Material-Dark";
+ package = pkgs.gruvbox-material-gtk-theme;
+ };
+ iconTheme = {
+ name = "Gruvbox-Dark";
+ package = pkgs.gruvbox-dark-icons-gtk;
+ };
+ cursorTheme = {
+ name = "Adwaita";
+ package = pkgs.adwaita-icon-theme;
+ };
+ gtk3.extraConfig = {
+ gtk-application-prefer-dark-theme = 1;
+ };
+ gtk4.extraConfig = {
+ gtk-application-prefer-dark-theme = 1;
+ };
+ };
+
+ services.kanshi = {
+ enable = true;
+ profiles = {
+ home = {
+ outputs = [
+ {
+ criteria = "DP-1";
+ mode = "1920x1080@240";
+ position = "1920,0";
+ }
+ ];
+ };
+ };
+ };
+
+ wayland.windowManager.labwc = {
+ enable = true;
+ autostart = [
+ "${pkgs.sfwbar}/bin/sfwbar"
+ "${pkgs.swaybg}/bin/swaybg -m fill -i /home/${username}/Developer/nix/images/pond.jpg & disown"
+ ];
+ environment = [
+ "XKB_DEFAULT_LAYOUT=de"
+ "XCURSOR_SIZE=24"
+ "XDG_CURRENT_DESKTOP=wlroots"
+ ];
+
+ menu = [
+ ];
+
+ rc = {
+ core = {
+ decoration = "server";
+ gap = 5;
+ adaptiveSync = "no";
+ reuseOutputMode = "yes";
+ };
+
+ theme = {
+ # "gruvbox-dark", "gruvbox-material-dark", "gruvbox-material-dark-blocks"
+ name = "gruvbox-material-dark-blocks";
+ };
+
+ keyboard = {
+ default = true;
+ keybind = [
+ {
+ "@key" = "W-Return";
+ action = {
+ "@name" = "Execute";
+ "@command" = "kitty";
+ };
+ }
+ {
+ "@key" = "W-F4";
+ action = {
+ "@name" = "None";
+ };
+ }
+ ];
+ };
+
+ mouse = {
+ default = true;
+ context = {
+ "@name" = "Root";
+ mousebind = {
+ "@button" = "Right";
+ "@action" = "Press";
+ action = {
+ "@name" = "ShowMenu";
+ "@menu" = "root-menu";
+ };
+ };
+ };
+ };
+ };
+ };
+ };
+ };
+}
diff --git a/modules/hosts/desktop/labwc/sfwbar.nix b/modules/hosts/desktop/labwc/sfwbar.nix
new file mode 100644
index 0000000..7021374
--- /dev/null
+++ b/modules/hosts/desktop/labwc/sfwbar.nix
@@ -0,0 +1,142 @@
+{
+ config,
+ username,
+ pkgs,
+ lib,
+ ...
+}:
+
+let
+ inherit (lib) mkEnableOption mkIf;
+ cfg = config.nx.desktop.sfwbar;
+in
+{
+ options.nx.desktop.sfwbar.enable = mkEnableOption "Enable sfwbar" // {
+ default = config.nx.desktop.labwc.enable;
+ };
+
+ config = mkIf cfg.enable {
+ home-manager.users.${username} = {
+ home.packages = with pkgs; [
+ sfwbar
+ gtk-layer-shell
+ ];
+
+ # CONFIGURATION
+ xdg.configFile."sfwbar/sfwbar.config".text = ''
+ # Term setup
+ Set Term = "foot"
+ Set ThicknessHint = "20px"
+
+ # Actions
+ TriggerAction "SIGRTMIN+1", SwitcherEvent "forward"
+ TriggerAction "SIGRTMIN+2", SwitcherEvent "back"
+
+ # Initialization
+ Function("SfwbarInit") {
+ SetLayer "top"
+ SetMirror "*"
+ SetExclusiveZone "auto"
+ }
+
+ # Placer (Window positioning)
+ placer {
+ xorigin = 5
+ yorigin = 5
+ xstep = 5
+ ystep = 5
+ children = true
+ }
+
+ # Task Switcher
+ switcher {
+ interval = 700
+ icons = true
+ labels = false
+ cols = 5
+ }
+
+ # Load Standard Library Winops
+ include("${pkgs.sfwbar}/share/sfwbar/winops.widget")
+
+ # Main Layout
+ layout {
+
+ # Start Menu
+ include("${pkgs.sfwbar}/share/sfwbar/startmenu.widget")
+
+ # Show Desktop
+ include("${pkgs.sfwbar}/share/sfwbar/showdesktop.widget")
+
+ # Taskbar
+ taskbar {
+ rows = 1
+ icons = true
+ labels = false
+ sort = false
+ action[3] = Menu "winops"
+ action[Drag] = Focus
+ }
+
+ # Spacer
+ label {
+ value = ""
+ style = "spacer"
+ }
+
+ # Pager
+ pager {
+ rows = 1
+ pins = "1","2","3","4"
+ preview = true
+ action[Drag] = WorkspaceActivate
+ }
+
+ # System Monitors
+ #include("${pkgs.sfwbar}/share/sfwbar/cpu.widget")
+ #include("${pkgs.sfwbar}/share/sfwbar/memory.widget")
+
+ # Tray
+ tray {
+ rows = 1
+ }
+
+ # --- MODULES ---
+ #include("${pkgs.sfwbar}/share/sfwbar/upower.widget")
+ #include("${pkgs.sfwbar}/share/sfwbar/battery-svg.widget")
+
+ #include("${pkgs.sfwbar}/share/sfwbar/idle.widget")
+ #include("${pkgs.sfwbar}/share/sfwbar/backlight.widget")
+ include("${pkgs.sfwbar}/share/sfwbar/volume.widget")
+ #include("${pkgs.sfwbar}/share/sfwbar/network-module.widget")
+ #include("${pkgs.sfwbar}/share/sfwbar/sway-lang.widget")
+
+ # Clock
+ grid {
+ style = "clock_grid"
+ label {
+ value = Time("%H:%M")
+ tooltip = Time("%H:%M\n%x")
+ }
+ }
+ }
+ #CSS
+
+ #spacer {
+ -GtkWidget-hexpand: true;
+ }
+
+ button#taskbar_item {
+ padding: 5px;
+ border-radius: 0px;
+ border-width: 0px;
+ -GtkWidget-hexpand: false;
+ }
+
+ button#taskbar_item:hover {
+ background-color: rgba(255, 255, 255, 0.1);
+ }
+ '';
+ };
+ };
+}