From 849b0f0cfd5498d0d38be1d3e19c80a9b0b25bea Mon Sep 17 00:00:00 2001 From: kptltd00m Date: Sun, 28 Jun 2026 12:48:00 +0200 Subject: [PATCH] Replace caelestia shell with Waybar and Walker Remove caelestia-shell/cli inputs and prune corresponding flake.lock entries. Update Hyprland keybindings to use walker, grimblast and Waybar, use loginctl for locking and pkill/waybar for restart. Add new home/system modules for waybar and walker and enable them in host configs. Delete obsolete INSTALL-laptop.md. --- INSTALL-laptop.md | 223 ------------------------------ flake.lock | 137 ------------------ flake.nix | 9 +- home/system/hyprland/bindings.nix | 63 ++++----- home/system/walker/default.nix | 9 ++ home/system/waybar/default.nix | 128 +++++++++++++++++ hosts/home-pc/home.nix | 3 +- hosts/laptop/home.nix | 3 +- hosts/work/home.nix | 3 +- 9 files changed, 169 insertions(+), 409 deletions(-) delete mode 100644 INSTALL-laptop.md create mode 100644 home/system/walker/default.nix create mode 100644 home/system/waybar/default.nix diff --git a/INSTALL-laptop.md b/INSTALL-laptop.md deleted file mode 100644 index c6dba84..0000000 --- a/INSTALL-laptop.md +++ /dev/null @@ -1,223 +0,0 @@ -# ThinkPad NixOS Installation Guide - -This guide provides step-by-step instructions for installing the NixOS configuration on your ThinkPad laptop. - -## Prerequisites - -- **ThinkPad laptop** (tested models: T480, T490, X1 Carbon) -- **USB flash drive** (8GB+ recommended) -- **Backup your data** - this will erase everything on the target device -- **NixOS ISO** - Download from [nixos.org](https://nixos.org/download.html) -- **Internet connection** (wired recommended for initial setup) - -## Preparation - -### 1. Create NixOS Installation Media - -```bash -# On another Linux machine or macOS: -sudo dd if=nixos-minimal-*.iso of=/dev/sdX bs=4M status=progress oflag=sync -# Replace /dev/sdX with your USB device (e.g., /dev/sdb) -# WARNING: This will erase the target device completely -``` - -### 2. Boot from USB - -1. Insert USB drive into ThinkPad -2. Power on and press **F12** to enter boot menu -3. Select the USB drive -4. At GRUB menu, select "NixOS" - -## Installation Steps - -### 3. Prepare Disks - -```bash -# Identify your disk (likely /dev/nvme0n1 for NVMe SSDs) -lsblk - -# Partition the disk (adjust for your needs) -sudo gdisk /dev/nvme0n1 -# Use: o (create new GPT), n (new partition), accept defaults for EFI (512M), then Linux filesystem (rest) -# Set type for EFI to EF00, Linux filesystem to 8300 -# Write changes with w -``` - -### 4. Format Partitions - -```bash -# Format EFI partition -sudo mkfs.fat -F32 /dev/nvme0n1p1 - -# Format root partition -sudo mkfs.ext4 /dev/nvme0n1p2 - -# Mount partitions -sudo mount /dev/nvme0n1p2 /mnt -sudo mkdir -p /mnt/boot/efi -sudo mount /dev/nvme0n1p1 /mnt/boot/efi -``` - -### 5. Generate NixOS Configuration - -```bash -# Generate initial configuration -sudo nixos-generate-config --root /mnt - -# This creates /mnt/etc/nixos/configuration.nix and hardware-configuration.nix -``` - -### 6. Clone Your Nixy Configuration - -```bash -# Clone your nixy repository -sudo nix-shell -p git -git clone https://gitea.doomlabs.de/KptltD00M/nixy.git /mnt/etc/nixos/nixy -cd /mnt/etc/nixos/nixy - -# Copy hardware configuration -sudo cp /mnt/etc/nixos/hardware-configuration.nix hosts/laptop/hardware-configuration.nix -``` - -### 7. Install NixOS - -```bash -# Switch to your laptop configuration -sudo nixos-install --flake /mnt/etc/nixos/nixy#laptop - -# When prompted, set a root password -``` - -### 8. Post-Installation - -```bash -# After reboot, log in as root -# Clone your configuration to your user -git clone https://gitea.doomlabs.de/KptltD00M/nixy.git ~/nixy -cd ~/nixy - -# Switch to your user configuration -nix run nixpkgs#home-manager -- switch --flake .#andi@laptop - -# Reboot -reboot -``` - -## ThinkPad-Specific Configuration - -### 1. Trackpad Configuration - -The configuration includes touchpad settings optimized for ThinkPad hardware. If you need to adjust: - -```nix -# Edit hosts/laptop/home.nix -programs.hyprland = { - touchpad = { - naturalScroll = true; - tap-to-click = true; - disableWhileTyping = false; - }; -}; -``` - -### 2. Keyboard Backlight - -```bash -# Enable keyboard backlight control -sudo nix-env -iA nixos.hid-tools -sudo systemctl enable --now thinkpad-keyboard-backlight.service -``` - -### 3. Power Management - -```bash -# Install TLP for better power management -sudo nix-env -iA nixos.tlp -sudo systemctl enable --now tlp -``` - -## Troubleshooting - -### Common Issues - -**1. WiFi not working:** -```bash -# Install firmware for your WiFi card -sudo nix-env -iA nixos.firmware -``` - -**2. Suspend/resume issues:** -```bash -# Edit hardware-configuration.nix -boot.kernelPackages = pkgs.linuxPackages_latest; -``` - -**3. Screen tearing:** -```bash -# Enable TearFree in hosts/laptop/configuration.nix -services.xserver.videoDrivers = [ "modesetting" ]; -``` - -### Debugging Commands - -```bash -# Check hardware detection -sudo dmesg | grep -i thinkpad - -# Check battery status -upower -i /org/freedesktop/UPower/devices/battery_BAT0 - -# Check display configuration -hyprctl monitors -``` - -## Maintenance - -### Updating Your System - -```bash -# Update flake inputs -nix flake update - -# Rebuild system -sudo nixos-rebuild switch --flake ~/nixy#laptop - -# Rebuild home configuration -nix run nixpkgs#home-manager -- switch --flake ~/nixy#andi@laptop -``` - -### Backup Configuration - -```bash -# Backup your hardware configuration -cp /etc/nixos/hardware-configuration.nix ~/nixy/hosts/laptop/ - -# Commit changes -cd ~/nixy -git add . -git commit -m "Update hardware config for ThinkPad" -git push -``` - -## Additional Resources - -- [NixOS Manual](https://nixos.org/manual/nixos/stable/) -- [ThinkPad Wiki](https://www.thinkwiki.org/) -- [NixOS Discourse](https://discourse.nixos.org/) - -## Notes - -- **ThinkPad T480/X1 Carbon specific:** These models have excellent Linux support. The configuration includes: - - Trackpoint acceleration settings - - Keyboard backlight control - - Power management profiles - - Display brightness controls - - Suspend/resume fixes - -- **Encryption:** If you enabled encryption during install, use: - ```bash - sudo cryptsetup luksOpen /dev/nvme0n1p2 cryptroot - sudo mount /dev/mapper/cryptroot /mnt - ``` - -- **Multi-boot:** If dual-booting with Windows, ensure Secure Boot is disabled in BIOS. diff --git a/flake.lock b/flake.lock index ba5fdc0..1587984 100644 --- a/flake.lock +++ b/flake.lock @@ -213,98 +213,6 @@ "type": "github" } }, - "caelestia-cli": { - "inputs": { - "caelestia-shell": "caelestia-shell", - "nixpkgs": [ - "nixpkgs" - ] - }, - "locked": { - "lastModified": 1780375472, - "narHash": "sha256-Q8RAJoYlakA6B2I5DVcuxzNbhCNU1nnIjqQZYP1KGrM=", - "owner": "caelestia-dots", - "repo": "cli", - "rev": "d1c8c8fc09738d1b40576e97c274b4a11a2e0ac7", - "type": "github" - }, - "original": { - "owner": "caelestia-dots", - "repo": "cli", - "type": "github" - } - }, - "caelestia-cli_2": { - "inputs": { - "caelestia-shell": [ - "caelestia-shell" - ], - "nixpkgs": [ - "caelestia-shell", - "nixpkgs" - ] - }, - "locked": { - "lastModified": 1779768519, - "narHash": "sha256-2n/447oNfAZrl1yncafLPgXMx5tuTF6T2B+zI/zFYkI=", - "owner": "caelestia-dots", - "repo": "cli", - "rev": "64a5507e74f6c7d0c29f9131964412f8f8c4dd89", - "type": "github" - }, - "original": { - "owner": "caelestia-dots", - "repo": "cli", - "type": "github" - } - }, - "caelestia-shell": { - "inputs": { - "caelestia-cli": [ - "caelestia-cli" - ], - "nixpkgs": [ - "caelestia-cli", - "nixpkgs" - ], - "quickshell": "quickshell" - }, - "locked": { - "lastModified": 1780196414, - "narHash": "sha256-iXmyWULTZuRd68xRL79e9GyYL9FZ6gfh6zl1PPlWX2A=", - "owner": "caelestia-dots", - "repo": "shell", - "rev": "63bb82762bb29ac9b7fcd5b97839abae721ce860", - "type": "github" - }, - "original": { - "owner": "caelestia-dots", - "repo": "shell", - "type": "github" - } - }, - "caelestia-shell_2": { - "inputs": { - "caelestia-cli": "caelestia-cli_2", - "nixpkgs": [ - "nixpkgs" - ], - "quickshell": "quickshell_2" - }, - "locked": { - "lastModified": 1780196414, - "narHash": "sha256-iXmyWULTZuRd68xRL79e9GyYL9FZ6gfh6zl1PPlWX2A=", - "owner": "caelestia-dots", - "repo": "shell", - "rev": "63bb82762bb29ac9b7fcd5b97839abae721ce860", - "type": "github" - }, - "original": { - "owner": "caelestia-dots", - "repo": "shell", - "type": "github" - } - }, "crane": { "locked": { "lastModified": 1779130139, @@ -1660,55 +1568,10 @@ "type": "github" } }, - "quickshell": { - "inputs": { - "nixpkgs": [ - "caelestia-cli", - "caelestia-shell", - "nixpkgs" - ] - }, - "locked": { - "lastModified": 1779430452, - "narHash": "sha256-zTslhsxLqUlRTML506iougTGzyR38Fzhzn7t4KDEuuE=", - "ref": "refs/heads/master", - "rev": "4b4fca3224ab977dc515ac0bb78d00b3dfa71e00", - "revCount": 819, - "type": "git", - "url": "https://git.outfoxxed.me/outfoxxed/quickshell" - }, - "original": { - "type": "git", - "url": "https://git.outfoxxed.me/outfoxxed/quickshell" - } - }, - "quickshell_2": { - "inputs": { - "nixpkgs": [ - "caelestia-shell", - "nixpkgs" - ] - }, - "locked": { - "lastModified": 1779430452, - "narHash": "sha256-zTslhsxLqUlRTML506iougTGzyR38Fzhzn7t4KDEuuE=", - "ref": "refs/heads/master", - "rev": "4b4fca3224ab977dc515ac0bb78d00b3dfa71e00", - "revCount": 819, - "type": "git", - "url": "https://git.outfoxxed.me/outfoxxed/quickshell" - }, - "original": { - "type": "git", - "url": "https://git.outfoxxed.me/outfoxxed/quickshell" - } - }, "root": { "inputs": { "awesome-wallpapers": "awesome-wallpapers", "blog": "blog", - "caelestia-cli": "caelestia-cli", - "caelestia-shell": "caelestia-shell_2", "default-creds": "default-creds", "helium-browser": "helium-browser", "home-manager": "home-manager", diff --git a/flake.nix b/flake.nix index 5041027..f694390 100644 --- a/flake.nix +++ b/flake.nix @@ -28,14 +28,7 @@ url = "github:nix-community/home-manager"; inputs.nixpkgs.follows = "nixpkgs"; }; - caelestia-shell = { - url = "github:caelestia-dots/shell"; - inputs.nixpkgs.follows = "nixpkgs"; - }; - caelestia-cli = { - url = "github:caelestia-dots/cli"; - inputs.nixpkgs.follows = "nixpkgs"; - }; + # Server nixarr.url = "github:rasmus-kirk/nixarr"; diff --git a/home/system/hyprland/bindings.nix b/home/system/hyprland/bindings.nix index 526c782..ccab2a2 100644 --- a/home/system/hyprland/bindings.nix +++ b/home/system/hyprland/bindings.nix @@ -91,14 +91,13 @@ in { "$mod,B, exec, uwsm app -- ${config.programs.librewolf.package}/bin/helium" # Browser # Power - "$mod, X, global, caelestia:session" # Powermenu ( - "$shiftMod, X, exec, " + "$mod, X, exec, " + lib.getExe (mkMenu [ { key = "l"; desc = "Lock"; - cmd = "hyprctl dispatch global caelestia:lock"; + cmd = "loginctl lock-session"; } { key = "s"; @@ -122,8 +121,8 @@ in { } { key = "c"; - desc = "Restart caelestia"; - cmd = "hyprctl dispatch exec 'caelestia-shell kill | sleep 1 | caelestia-shell'"; + desc = "Restart Waybar"; + cmd = "pkill -x waybar; waybar"; } ]) ) @@ -131,10 +130,9 @@ in { # Quick launch "$mod,RETURN, exec, uwsm app -- ${pkgs.ghostty}/bin/ghostty" # Ghostty (terminal) "$mod,E, exec, uwsm app -- ${pkgs.thunar}/bin/thunar" # Thunar - "$shiftMod, E, exec, pkill fuzzel || caelestia emoji -p" # Emoji picker - "$mod, SPACE, global, caelestia:launcher" # Launcher - "$mod, N, exec, caelestia shell drawers toggle sidebar" # Sidebar (Notifications, quick actions) - "$mod, D, exec, caelestia shell drawers toggle dashboard" # Dashboard + "$mod, SPACE, exec, walker" # Launcher + "$mod, N, exec, ${lib.getExe pkgs.grimblast} save area" # Save screenshot + "$mod, D, exec, ${lib.getExe pkgs.grimblast} copy area" # Copy screenshot # Windows "$mod,Q, killactive," # Close window @@ -152,10 +150,9 @@ in { "$shiftMod,L, focusmonitor, 1" # Focus next monitor # Utilities - "$shiftMod, SPACE, exec, caelestia shell gameMode toggle" # Toggle Focus/Game mode - "$shiftMod, S, global, caelestia:screenshotFreeze" # Capture region (freeze) - ", Print, global, caelestia:screenshotFreeze" # Capture region (freeze) - "$shiftMod+Alt, S, global, caelestia:screenshot" # Capture region + "$shiftMod, S, exec, ${lib.getExe pkgs.grimblast} copy area" # Capture region + ", Print, exec, ${lib.getExe pkgs.grimblast} copy area" # Capture region + "$shiftMod+Alt, S, exec, ${lib.getExe pkgs.grimblast} save area" # Capture region ] ++ (builtins.concatLists ( builtins.genList ( @@ -175,33 +172,23 @@ in { ]; bindl = [ - # Brightness - ", XF86MonBrightnessUp, global, caelestia:brightnessUp" - ", XF86MonBrightnessDown, global, caelestia:brightnessDown" + # Brightness + ", XF86MonBrightnessUp, exec, ${lib.getExe pkgs.brightnessctl} set 5%+" + ", XF86MonBrightnessDown, exec, ${lib.getExe pkgs.brightnessctl} set 5%-" - # Media - ", XF86AudioPlay, global, caelestia:mediaToggle" - ", XF86AudioPause, global, caelestia:mediaToggle" - ", XF86AudioNext, global, caelestia:mediaNext" - ", XF86AudioPrev, global, caelestia:mediaPrev" - ", XF86AudioStop, global, caelestia:mediaStop" + # Media + ", XF86AudioPlay, exec, ${lib.getExe pkgs.playerctl} play-pause" + ", XF86AudioPause, exec, ${lib.getExe pkgs.playerctl} play-pause" + ", XF86AudioNext, exec, ${lib.getExe pkgs.playerctl} next" + ", XF86AudioPrev, exec, ${lib.getExe pkgs.playerctl} previous" + ", XF86AudioStop, exec, ${lib.getExe pkgs.playerctl} stop" + + # Sound + ", XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle" + ", XF86AudioRaiseVolume, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ 0; wpctl set-volume -l 1 @DEFAULT_AUDIO_SINK@ 5%+" + ", XF86AudioLowerVolume, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ 0; wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-" + ]; - # Sound - ", XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle" - ", XF86AudioRaiseVolume, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ 0; wpctl set-volume -l 1 @DEFAULT_AUDIO_SINK@ 5%+" - ", XF86AudioLowerVolume, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ 0; wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-" - ]; - bindin = [ - # Launcher - "$mod, mouse:272, global, caelestia:launcherInterrupt" - "$mod, mouse:273, global, caelestia:launcherInterrupt" - "$mod, mouse:274, global, caelestia:launcherInterrupt" - "$mod, mouse:275, global, caelestia:launcherInterrupt" - "$mod, mouse:276, global, caelestia:launcherInterrupt" - "$mod, mouse:277, global, caelestia:launcherInterrupt" - "$mod, mouse_up, global, caelestia:launcherInterrupt" - "$mod, mouse_down, global, caelestia:launcherInterrupt" - ]; }; } diff --git a/home/system/walker/default.nix b/home/system/walker/default.nix new file mode 100644 index 0000000..9da806d --- /dev/null +++ b/home/system/walker/default.nix @@ -0,0 +1,9 @@ +{pkgs, ...}: { + home.packages = with pkgs; [ + walker + ]; + + wayland.windowManager.hyprland.settings.exec-once = [ + "walker --gapplication-service" + ]; +} diff --git a/home/system/waybar/default.nix b/home/system/waybar/default.nix new file mode 100644 index 0000000..35ac402 --- /dev/null +++ b/home/system/waybar/default.nix @@ -0,0 +1,128 @@ +{pkgs, config, ...}: let + colors = config.lib.stylix.colors; +in { + home.packages = with pkgs; [ + waybar + ]; + + xdg.configFile."waybar/config".text = builtins.toJSON { + layer = "top"; + position = "top"; + height = 34; + spacing = 8; + margin-top = 8; + margin-left = 8; + margin-right = 8; + "modules-left" = [ + "hyprland/workspaces" + ]; + "modules-center" = [ + "hyprland/window" + ]; + "modules-right" = [ + "tray" + "network" + "pulseaudio" + "clock" + ]; + + "hyprland/workspaces" = { + format = "{name}"; + "disable-scroll" = true; + "all-outputs" = true; + "on-click" = "activate"; + }; + + "hyprland/window" = { + format = "{}"; + "max-length" = 80; + "separate-outputs" = true; + }; + + tray = { + "icon-size" = 18; + spacing = 10; + }; + + network = { + format-wifi = "󰖩 {signalStrength}%"; + format-ethernet = "󰈀 {ifname}"; + format-linked = "󰈀 {ifname}"; + format-disconnected = "󰖪 Disconnected"; + tooltip-format = "{ifname} via {gwaddr}"; + }; + + pulseaudio = { + format = "󰕾 {volume}%"; + format-muted = "󰖁 Muted"; + tooltip = true; + }; + + clock = { + format = " {:%H:%M}"; + tooltip-format = "{:%A, %B %d, %Y}"; + }; + }; + + xdg.configFile."waybar/style.css".text = '' + * { + border: none; + border-radius: 0; + min-height: 0; + font-family: "${config.stylix.fonts.sansSerif.name}", "${config.stylix.fonts.monospace.name}", sans-serif; + font-size: 13px; + } + + window#waybar { + background: #${colors.base00}E6; + color: #${colors.base05}; + } + + #waybar { + background: transparent; + } + + #workspaces, + #window, + #tray, + #network, + #pulseaudio, + #clock { + margin: 8px 0; + padding: 0 12px; + border-radius: ${toString config.theme.bar-rounding}px; + background: #${colors.base01}E6; + border: 1px solid #${colors.base02}; + } + + #workspaces button { + padding: 0 10px; + margin: 0 2px; + border-radius: ${toString config.theme.bar-rounding}px; + color: #${colors.base05}; + background: transparent; + } + + #workspaces button.active { + background: #${colors.base0D}; + color: #${colors.base00}; + } + + #workspaces button:hover { + background: #${colors.base02}; + } + + #window { + min-width: 180px; + } + + #network.disconnected, + #pulseaudio.muted { + color: #${colors.base08}; + } + ''; + + wayland.windowManager.hyprland.settings.exec-once = [ + "waybar" + ]; +} diff --git a/hosts/home-pc/home.nix b/hosts/home-pc/home.nix index 24621cc..0910d70 100644 --- a/hosts/home-pc/home.nix +++ b/hosts/home-pc/home.nix @@ -33,7 +33,8 @@ # System # ───────────────────────────────────────────────────────────── ../../home/system/hyprland - ../../home/system/caelestia-shell + ../../home/system/waybar + ../../home/system/walker ../../home/system/hyprpaper ../../home/system/mime ../../home/system/udiskie diff --git a/hosts/laptop/home.nix b/hosts/laptop/home.nix index c2c4860..c17e10e 100644 --- a/hosts/laptop/home.nix +++ b/hosts/laptop/home.nix @@ -31,7 +31,8 @@ # System # ───────────────────────────────────────────────────────────── ../../home/system/hyprland - ../../home/system/caelestia-shell + ../../home/system/waybar + ../../home/system/walker ../../home/system/hyprpaper ../../home/system/mime ../../home/system/udiskie diff --git a/hosts/work/home.nix b/hosts/work/home.nix index a64d1a9..3f7887d 100644 --- a/hosts/work/home.nix +++ b/hosts/work/home.nix @@ -22,7 +22,8 @@ # System (Desktop environment like stuff) ../../home/system/hyprland - ../../home/system/caelestia-shell + ../../home/system/waybar + ../../home/system/walker ../../home/system/hyprpaper ../../home/system/mime ../../home/system/udiskie