mirror of
https://github.com/0x1d/nix.git
synced 2025-12-14 05:56:51 +01:00
add hyprland config
This commit is contained in:
19
README.md
19
README.md
@@ -1,6 +1,21 @@
|
|||||||
# Nix Configuration
|
# NixOS Configuration
|
||||||
|
|
||||||
This repo contains my personal Nix / NixOS configuration.
|
This repo contains my personal NixOS configuration with multiple desktop environments.
|
||||||
|
|
||||||
|
## Quick Start
|
||||||
|
|
||||||
|
### Available Configurations
|
||||||
|
- **`nixos`** - GNOME desktop environment
|
||||||
|
- **`hyprland`** - Hyprland window manager
|
||||||
|
|
||||||
|
### Quick Commands
|
||||||
|
```bash
|
||||||
|
# Test configuration without switching
|
||||||
|
./ctl.sh os test hyprland
|
||||||
|
|
||||||
|
# Switch to Hyprland
|
||||||
|
./ctl.sh os rebuild hyprland
|
||||||
|
```
|
||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
|
|||||||
2
ctl.sh
2
ctl.sh
@@ -68,7 +68,7 @@ function os {
|
|||||||
}
|
}
|
||||||
function gc {
|
function gc {
|
||||||
sudo nix-collect-garbage -d
|
sudo nix-collect-garbage -d
|
||||||
sudo nixos-rebuild switch
|
os rebuild nixos
|
||||||
}
|
}
|
||||||
${@}
|
${@}
|
||||||
}
|
}
|
||||||
|
|||||||
164
docs/hyprland.md
Normal file
164
docs/hyprland.md
Normal file
@@ -0,0 +1,164 @@
|
|||||||
|
# Hyprland Desktop Configuration
|
||||||
|
|
||||||
|
This directory contains the Hyprland desktop configuration for NixOS with i3-style keybindings.
|
||||||
|
|
||||||
|
## What is Hyprland?
|
||||||
|
|
||||||
|
Hyprland is a dynamic tiling Wayland compositor that doesn't sacrifice on its looks. It supports multiple layouts, window rules, and a highly customizable configuration system.
|
||||||
|
|
||||||
|
## Features
|
||||||
|
|
||||||
|
- **Dynamic Tiling**: Automatic window management with multiple layout options
|
||||||
|
- **Wayland Native**: Modern display protocol support
|
||||||
|
- **Highly Customizable**: Extensive configuration options
|
||||||
|
- **Performance**: Optimized for smooth animations and responsiveness
|
||||||
|
- **Swiss Keyboard Layout**: Pre-configured for Swiss German layout (ch)
|
||||||
|
- **i3-Style Keybindings**: Familiar navigation for i3 users
|
||||||
|
|
||||||
|
## Included Components
|
||||||
|
|
||||||
|
### Core Applications
|
||||||
|
- **Hyprland**: The compositor itself
|
||||||
|
- **Waybar**: Status bar with workspace management
|
||||||
|
- **Dunst**: Notification daemon
|
||||||
|
- **Alacritty**: Terminal emulator (with transparency)
|
||||||
|
- **Thunar**: File manager (XFCE)
|
||||||
|
- **Wofi**: Application launcher
|
||||||
|
|
||||||
|
### Utilities
|
||||||
|
- **Grim + Slurp**: Screenshot tools
|
||||||
|
- **Hyprpicker**: Color picker
|
||||||
|
- **Swww**: Wallpaper utility
|
||||||
|
- **Wl-clipboard**: Clipboard management
|
||||||
|
- **Cliphist**: Clipboard history
|
||||||
|
- **Pavucontrol**: Volume control
|
||||||
|
- **Brightnessctl**: Brightness control
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
### Building the Configuration
|
||||||
|
|
||||||
|
To build the Hyprland configuration:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd /home/master/src/nix
|
||||||
|
nix build .#hyprland
|
||||||
|
```
|
||||||
|
|
||||||
|
### Switching to Hyprland
|
||||||
|
|
||||||
|
After building, you can switch to the Hyprland configuration:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sudo nixos-rebuild switch --flake .#hyprland
|
||||||
|
```
|
||||||
|
|
||||||
|
### Logging In
|
||||||
|
|
||||||
|
When you log in, select "Hyprland" from your display manager. If you're using a tty, you can start Hyprland directly with:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
Hyprland
|
||||||
|
```
|
||||||
|
|
||||||
|
## Key Bindings (i3-Style)
|
||||||
|
|
||||||
|
### **Navigation & Focus:**
|
||||||
|
- **Super + h/j/k/l** OR **Super + arrow keys** - Move focus (vim-style, like i3)
|
||||||
|
- **Super + 1-0** - Switch to workspace 1-10
|
||||||
|
- **Super + Shift + 1-0** - Move window to workspace 1-10
|
||||||
|
|
||||||
|
### **Window Management:**
|
||||||
|
- **Super + Control + h/j/k/l** OR **Super + Control + arrow keys** - Resize windows
|
||||||
|
- **Super + Shift + h/j/k/l** OR **Super + Shift + arrow keys** - Move windows
|
||||||
|
- **Super + f** - Toggle fullscreen
|
||||||
|
- **Super + v** - Toggle floating mode
|
||||||
|
- **Super + s** - Toggle split direction
|
||||||
|
|
||||||
|
### **Applications:**
|
||||||
|
- **Super + d** - Application launcher (wofi)
|
||||||
|
- **Super + Return** - Terminal (alacritty)
|
||||||
|
- **Super + Q** - Close active window
|
||||||
|
|
||||||
|
### **System Controls:**
|
||||||
|
- **Super + Shift + q** - Exit Hyprland
|
||||||
|
- **Super + Shift + r** - Reload Hyprland config
|
||||||
|
- **Super + p** - Screenshot selected area
|
||||||
|
- **Volume keys** - Audio control
|
||||||
|
- **Brightness keys** - Screen brightness
|
||||||
|
|
||||||
|
### **Mouse:**
|
||||||
|
- **Super + Left Click** - Move windows
|
||||||
|
- **Super + Right Click** - Resize windows
|
||||||
|
|
||||||
|
## Customization
|
||||||
|
|
||||||
|
### Hyprland Configuration
|
||||||
|
|
||||||
|
The main configuration is in `/etc/xdg/hypr/hyprland.conf`. You can modify this file to customize:
|
||||||
|
|
||||||
|
- Window decorations and animations
|
||||||
|
- Key bindings
|
||||||
|
- Workspace behavior
|
||||||
|
- Monitor configuration
|
||||||
|
- Input settings
|
||||||
|
|
||||||
|
### Waybar Configuration
|
||||||
|
|
||||||
|
The status bar configuration is in `/etc/xdg/waybar/config` and styling in `/etc/xdg/waybar/style.css`.
|
||||||
|
|
||||||
|
### Dunst Configuration
|
||||||
|
|
||||||
|
Notification settings are in `/etc/xdg/dunst/dunstrc`.
|
||||||
|
|
||||||
|
## Configuration Files
|
||||||
|
|
||||||
|
The system automatically creates these configuration files:
|
||||||
|
|
||||||
|
- **Hyprland**: `/etc/xdg/hypr/hyprland.conf`
|
||||||
|
- **Waybar**: `/etc/xdg/waybar/config` and `/etc/xdg/waybar/style.css`
|
||||||
|
- **Dunst**: `/etc/xdg/dunst/dunstrc`
|
||||||
|
|
||||||
|
## Troubleshooting
|
||||||
|
|
||||||
|
### Common Issues
|
||||||
|
|
||||||
|
1. **Applications not starting**: Ensure the application supports Wayland
|
||||||
|
2. **Screen tearing**: Check if `allow_tearing = true` is set in hyprland.conf
|
||||||
|
3. **Performance issues**: Try disabling animations or reducing blur effects
|
||||||
|
4. **Keybindings not working**: Check if there are conflicts with other applications
|
||||||
|
|
||||||
|
### Logs
|
||||||
|
|
||||||
|
Hyprland logs are available in:
|
||||||
|
- `journalctl --user -f` (for user session)
|
||||||
|
- `~/.local/share/hyprland/hyprland.log`
|
||||||
|
|
||||||
|
### XWayland Support
|
||||||
|
|
||||||
|
XWayland is enabled by default for compatibility with X11 applications. If you experience issues, you can disable it by setting `xwayland.enable = false` in the configuration.
|
||||||
|
|
||||||
|
## Building as VM
|
||||||
|
|
||||||
|
To build and test the Hyprland configuration as a virtual machine:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
./ctl.sh os rebuild hyprland
|
||||||
|
```
|
||||||
|
|
||||||
|
## Resources
|
||||||
|
|
||||||
|
- [Hyprland Wiki](https://wiki.hyprland.org/)
|
||||||
|
- [Waybar Documentation](https://github.com/Alexays/Waybar/wiki)
|
||||||
|
- [Dunst Documentation](https://dunst-project.org/documentation/)
|
||||||
|
- [i3 User's Guide](https://i3wm.org/docs/userguide.html) (for keybinding reference)
|
||||||
|
|
||||||
|
## Notes
|
||||||
|
|
||||||
|
- This configuration is optimized for Swiss German keyboard layout
|
||||||
|
- All configuration files are managed by NixOS and will be restored on rebuild
|
||||||
|
- Custom user configurations should be placed in `~/.config/hypr/` to override system defaults
|
||||||
|
- Keybindings follow i3 conventions for easy transition from i3wm
|
||||||
|
- **Dual navigation**: Both vim-style (h/j/k/l) and arrow keys work for all functions
|
||||||
|
- **Intuitive modifiers**: Control for resizing, Shift for moving windows
|
||||||
|
- Monitor configuration is set for a 1920x1080@144 display (customize as needed)
|
||||||
@@ -22,7 +22,7 @@
|
|||||||
./users/master.nix
|
./users/master.nix
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
gnome = nixpkgs.lib.nixosSystem {
|
hyprland = nixpkgs.lib.nixosSystem {
|
||||||
system = "x86_64-linux";
|
system = "x86_64-linux";
|
||||||
modules = [
|
modules = [
|
||||||
home-manager.nixosModules.home-manager
|
home-manager.nixosModules.home-manager
|
||||||
@@ -30,7 +30,7 @@
|
|||||||
./hardware/lenovo-thinkpad-e14.nix
|
./hardware/lenovo-thinkpad-e14.nix
|
||||||
./system/base.nix
|
./system/base.nix
|
||||||
./system/packages.nix
|
./system/packages.nix
|
||||||
./system/desktop/gnome.nix
|
./system/desktop/hyprland.nix
|
||||||
./users/demo.nix
|
./users/demo.nix
|
||||||
./users/master.nix
|
./users/master.nix
|
||||||
];
|
];
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
(modulesPath + "/installer/scan/not-detected.nix")
|
(modulesPath + "/installer/scan/not-detected.nix")
|
||||||
];
|
];
|
||||||
|
|
||||||
boot.initrd.availableKernelModules = [ "xhci_pci" "thunderbolt" "nvme" "usb_storage" "sd_mod" ];
|
boot.initrd.availableKernelModules = [ "xhci_pci" "thunderbolt" "nvme" "usb_storage" "sd_mod" "virtio-scsi"];
|
||||||
boot.initrd.kernelModules = [ ];
|
boot.initrd.kernelModules = [ ];
|
||||||
boot.kernelModules = [ "kvm-intel" ];
|
boot.kernelModules = [ "kvm-intel" ];
|
||||||
boot.kernelParams = [ "modprobe.blacklist=dvb_usb_rtl28xxu" ];
|
boot.kernelParams = [ "modprobe.blacklist=dvb_usb_rtl28xxu" ];
|
||||||
@@ -45,4 +45,5 @@
|
|||||||
hardware.bluetooth.enable = true;
|
hardware.bluetooth.enable = true;
|
||||||
hardware.ledger.enable = true;
|
hardware.ledger.enable = true;
|
||||||
hardware.rtl-sdr.enable = true;
|
hardware.rtl-sdr.enable = true;
|
||||||
|
hardware.enableAllHardware = true;
|
||||||
}
|
}
|
||||||
|
|||||||
575
os/system/desktop/hyprland-config.nix
Normal file
575
os/system/desktop/hyprland-config.nix
Normal file
@@ -0,0 +1,575 @@
|
|||||||
|
{ pkgs, ... }: {
|
||||||
|
# Create Hyprland configuration directory and files
|
||||||
|
environment.etc."xdg/hypr/hyprland.conf".text = ''
|
||||||
|
# Hyprland Configuration
|
||||||
|
# This is a basic configuration that you can customize
|
||||||
|
|
||||||
|
# Monitor configuration
|
||||||
|
#monitor=,preferred,auto,auto
|
||||||
|
monitor = eDP-1, 1920x1080@144, 0x0, 1
|
||||||
|
|
||||||
|
# Execute your favorite apps at startup
|
||||||
|
exec-once = waybar
|
||||||
|
exec-once = dunst
|
||||||
|
exec-once = swww init
|
||||||
|
exec-once = wl-paste --watch cliphist store
|
||||||
|
|
||||||
|
# Source a file (multi-file configs)
|
||||||
|
# source = ~/.config/hypr/myColors.conf
|
||||||
|
|
||||||
|
# Some default env vars
|
||||||
|
env = XCURSOR_SIZE,24
|
||||||
|
env = QT_QPA_PLATFORM,wayland
|
||||||
|
|
||||||
|
# For all categories, see https://wiki.hyprland.org/Configuring/Variables/
|
||||||
|
input {
|
||||||
|
kb_layout = ch
|
||||||
|
kb_variant =
|
||||||
|
kb_model =
|
||||||
|
kb_options =
|
||||||
|
kb_rules =
|
||||||
|
|
||||||
|
follow_mouse = 1
|
||||||
|
|
||||||
|
touchpad {
|
||||||
|
natural_scroll = no
|
||||||
|
}
|
||||||
|
|
||||||
|
sensitivity = 0 # -1.0 - 1.0, 0 means no modification.
|
||||||
|
}
|
||||||
|
|
||||||
|
general {
|
||||||
|
# See https://wiki.hyprland.org/Configuring/Variables/ for more
|
||||||
|
|
||||||
|
gaps_in = 5
|
||||||
|
gaps_out = 20
|
||||||
|
border_size = 2
|
||||||
|
col.active_border = rgba(33ccffee) rgba(00ff99ee) 45deg
|
||||||
|
col.inactive_border = rgba(595959aa)
|
||||||
|
|
||||||
|
layout = dwindle
|
||||||
|
|
||||||
|
# Please see https://wiki.hyprland.org/Configuring/Tearing/ before you turn this on
|
||||||
|
allow_tearing = false
|
||||||
|
}
|
||||||
|
|
||||||
|
decoration {
|
||||||
|
# See https://wiki.hyprland.org/Configuring/Variables/ for more
|
||||||
|
|
||||||
|
rounding = 10
|
||||||
|
#blur = yes
|
||||||
|
#blur_size = 3
|
||||||
|
#blur_passes = 1
|
||||||
|
#blur_new_optimizations = on
|
||||||
|
|
||||||
|
#drop_shadow = yes
|
||||||
|
#shadow_range = 4
|
||||||
|
#shadow_render_power = 3
|
||||||
|
#col.shadow = rgba(1a1a1aee)
|
||||||
|
}
|
||||||
|
|
||||||
|
animations {
|
||||||
|
enabled = yes
|
||||||
|
|
||||||
|
# Some default animations, see https://wiki.hyprland.org/Configuring/Animations/ for more
|
||||||
|
|
||||||
|
bezier = myBezier, 0.05, 0.9, 0.1, 1.05
|
||||||
|
|
||||||
|
animation = windows, 1, 7, myBezier
|
||||||
|
animation = windowsOut, 1, 7, default, popin 80%
|
||||||
|
animation = border, 1, 10, default
|
||||||
|
animation = borderangle, 1, 8, default
|
||||||
|
animation = fade, 1, 7, default
|
||||||
|
animation = workspaces, 1, 6, default
|
||||||
|
}
|
||||||
|
|
||||||
|
dwindle {
|
||||||
|
# See https://wiki.hyprland.org/Configuring/Dwindle-Layout/ for more
|
||||||
|
pseudotile = yes # master switch for pseudotiling. Enabling is bound to mainMod + P in the keybinds section below
|
||||||
|
preserve_split = yes # you probably want this
|
||||||
|
}
|
||||||
|
|
||||||
|
master {
|
||||||
|
# See https://wiki.hyprland.org/Configuring/Master-Layout/ for more
|
||||||
|
}
|
||||||
|
|
||||||
|
gestures {
|
||||||
|
# See https://wiki.hyprland.org/Configuring/Variables/ for more
|
||||||
|
workspace_swipe = off
|
||||||
|
}
|
||||||
|
|
||||||
|
# Example windowrule v1
|
||||||
|
# rule to add support for window titles
|
||||||
|
# windowrule = noblur,^(kitty)$
|
||||||
|
# Example windowrule v2
|
||||||
|
# windowrulev2 = float,class:^(Rofi)$,title:^(rofi - Launcher)$
|
||||||
|
# See https://wiki.hyprland.org/Configuring/Window-Rules/ for more
|
||||||
|
|
||||||
|
# i3-style keybindings
|
||||||
|
# Application launcher and terminal
|
||||||
|
bind = SUPER, d, exec, wofi --show drun
|
||||||
|
bind = SUPER, RETURN, exec, alacritty
|
||||||
|
bind = SUPER, Q, killactive,
|
||||||
|
|
||||||
|
# Window management (vim-style + arrow keys)
|
||||||
|
bind = SUPER, h, movefocus, l
|
||||||
|
bind = SUPER, j, movefocus, d
|
||||||
|
bind = SUPER, k, movefocus, u
|
||||||
|
bind = SUPER, l, movefocus, r
|
||||||
|
bind = SUPER, left, movefocus, l
|
||||||
|
bind = SUPER, down, movefocus, d
|
||||||
|
bind = SUPER, up, movefocus, u
|
||||||
|
bind = SUPER, right, movefocus, r
|
||||||
|
|
||||||
|
# Window resizing (vim-style + arrow keys) - Control modifier
|
||||||
|
bind = SUPER CTRL, h, resizeactive, -20 0
|
||||||
|
bind = SUPER CTRL, j, resizeactive, 0 20
|
||||||
|
bind = SUPER CTRL, k, resizeactive, 0 -20
|
||||||
|
bind = SUPER CTRL, l, resizeactive, 20 0
|
||||||
|
bind = SUPER CTRL, left, resizeactive, -20 0
|
||||||
|
bind = SUPER CTRL, down, resizeactive, 0 20
|
||||||
|
bind = SUPER CTRL, up, resizeactive, 0 -20
|
||||||
|
bind = SUPER CTRL, right, resizeactive, 20 0
|
||||||
|
|
||||||
|
# Window moving (vim-style + arrow keys) - Shift modifier
|
||||||
|
bind = SUPER SHIFT, h, movewindow, l
|
||||||
|
bind = SUPER SHIFT, j, movewindow, d
|
||||||
|
bind = SUPER SHIFT, k, movewindow, u
|
||||||
|
bind = SUPER SHIFT, l, movewindow, r
|
||||||
|
bind = SUPER SHIFT, left, movewindow, l
|
||||||
|
bind = SUPER SHIFT, down, movewindow, d
|
||||||
|
bind = SUPER SHIFT, up, movewindow, u
|
||||||
|
bind = SUPER SHIFT, right, movewindow, r
|
||||||
|
|
||||||
|
# Workspace management
|
||||||
|
bind = SUPER, 1, workspace, 1
|
||||||
|
bind = SUPER, 2, workspace, 2
|
||||||
|
bind = SUPER, 3, workspace, 3
|
||||||
|
bind = SUPER, 4, workspace, 4
|
||||||
|
bind = SUPER, 5, workspace, 5
|
||||||
|
bind = SUPER, 6, workspace, 6
|
||||||
|
bind = SUPER, 7, workspace, 7
|
||||||
|
bind = SUPER, 8, workspace, 8
|
||||||
|
bind = SUPER, 9, workspace, 9
|
||||||
|
bind = SUPER, 0, workspace, 10
|
||||||
|
|
||||||
|
# Move windows to workspaces
|
||||||
|
bind = SUPER SHIFT, 1, movetoworkspace, 1
|
||||||
|
bind = SUPER SHIFT, 2, movetoworkspace, 2
|
||||||
|
bind = SUPER SHIFT, 3, movetoworkspace, 3
|
||||||
|
bind = SUPER SHIFT, 4, movetoworkspace, 4
|
||||||
|
bind = SUPER SHIFT, 5, movetoworkspace, 5
|
||||||
|
bind = SUPER SHIFT, 6, movetoworkspace, 6
|
||||||
|
bind = SUPER SHIFT, 7, movetoworkspace, 7
|
||||||
|
bind = SUPER SHIFT, 8, movetoworkspace, 8
|
||||||
|
bind = SUPER SHIFT, 9, movetoworkspace, 9
|
||||||
|
bind = SUPER SHIFT, 0, movetoworkspace, 10
|
||||||
|
|
||||||
|
# Layout controls
|
||||||
|
#bind = SUPER, f, fullscreen, 1
|
||||||
|
#bind = SUPER, SHIFT, f, fullscreen, 0
|
||||||
|
bind = SUPER, v, togglefloating,
|
||||||
|
bind = SUPER, s, togglesplit, # dwindle
|
||||||
|
|
||||||
|
# Exit and reload
|
||||||
|
bind = SUPER SHIFT, q, killactive,
|
||||||
|
bind = SUPER SHIFT, r, exec, hyprctl reload
|
||||||
|
|
||||||
|
# Screenshot
|
||||||
|
bind = SUPER, p, exec, grim -g "$(slurp)" - | wl-copy
|
||||||
|
|
||||||
|
# Volume control
|
||||||
|
bind = , XF86AudioRaiseVolume, exec, pactl set-sink-volume @DEFAULT_SINK@ +5%
|
||||||
|
bind = , XF86AudioLowerVolume, exec, pactl set-sink-volume @DEFAULT_SINK@ -5%
|
||||||
|
bind = , XF86AudioMute, exec, pactl set-sink-mute @DEFAULT_SINK@ toggle
|
||||||
|
|
||||||
|
# Brightness control
|
||||||
|
bind = , XF86MonBrightnessUp, exec, brightnessctl set +5%
|
||||||
|
bind = , XF86MonBrightnessDown, exec, brightnessctl set 5%-
|
||||||
|
|
||||||
|
# Mouse bindings for window management
|
||||||
|
bindm = SUPER, mouse:272, movewindow
|
||||||
|
bindm = SUPER, mouse:273, resizewindow
|
||||||
|
'';
|
||||||
|
|
||||||
|
# Create Waybar configuration
|
||||||
|
environment.etc."xdg/waybar/config".text = ''
|
||||||
|
{
|
||||||
|
"layer": "top",
|
||||||
|
"position": "top",
|
||||||
|
"height": 30,
|
||||||
|
"spacing": 4,
|
||||||
|
"modules-left": ["hyprland/workspaces"],
|
||||||
|
"modules-center": ["hyprland/window"],
|
||||||
|
"modules-right": ["battery", "pulseaudio", "network", "cpu", "memory", "clock", "tray"],
|
||||||
|
"hyprland/workspaces": {
|
||||||
|
"disable-scroll": true,
|
||||||
|
"all-outputs": true,
|
||||||
|
"format": "{name}",
|
||||||
|
"format-icons": {
|
||||||
|
"1": "1",
|
||||||
|
"2": "2",
|
||||||
|
"3": "3",
|
||||||
|
"4": "4",
|
||||||
|
"5": "5",
|
||||||
|
"urgent": "urgent"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"hyprland/window": {
|
||||||
|
"format": "{}",
|
||||||
|
"max-length": 50
|
||||||
|
},
|
||||||
|
"battery": {
|
||||||
|
"states": {
|
||||||
|
"warning": 20,
|
||||||
|
"critical": 10
|
||||||
|
},
|
||||||
|
"format": "{icon} {capacity}%",
|
||||||
|
"format-charging": " {capacity}%",
|
||||||
|
"format-plugged": " {capacity}%",
|
||||||
|
"format-alt": "{icon} {time}",
|
||||||
|
"format-icons": ["", "", "", "", ""],
|
||||||
|
"on-click": "powerprofilesctl"
|
||||||
|
},
|
||||||
|
"clock": {
|
||||||
|
"tooltip-format": "<big>{:%Y %B}</big>\\n<tt><small>{calendar}</small></tt>",
|
||||||
|
"format": " {:%H:%M}",
|
||||||
|
"format-alt": " {:%Y-%m-%d %H:%M}"
|
||||||
|
},
|
||||||
|
"cpu": {
|
||||||
|
"format": " {usage}%",
|
||||||
|
"format-icons": ["", "", "", "", ""],
|
||||||
|
"tooltip": false
|
||||||
|
},
|
||||||
|
"memory": {
|
||||||
|
"format": " {percentage}%",
|
||||||
|
"format-icons": ["", "", "", "", ""],
|
||||||
|
"tooltip": false
|
||||||
|
},
|
||||||
|
"network": {
|
||||||
|
"format-wifi": " {essid}",
|
||||||
|
"format-ethernet": " {ipaddr}",
|
||||||
|
"format-disconnected": " Disconnected",
|
||||||
|
"format-icons": ["", "", "", "", ""],
|
||||||
|
"tooltip-format": "{ifname} via {gwaddr}",
|
||||||
|
"max-length": 50
|
||||||
|
},
|
||||||
|
"pulseaudio": {
|
||||||
|
"format": " {volume}%",
|
||||||
|
"format-bluetooth": " {volume}% ",
|
||||||
|
"format-bluetooth-muted": " ",
|
||||||
|
"format-muted": " ",
|
||||||
|
"format-icons": {
|
||||||
|
"headphone": "",
|
||||||
|
"hands-free": "",
|
||||||
|
"headset": "",
|
||||||
|
"phone": "",
|
||||||
|
"portable": "",
|
||||||
|
"car": "",
|
||||||
|
"default": ["", "", "", ""]
|
||||||
|
},
|
||||||
|
"on-click": "pavucontrol"
|
||||||
|
},
|
||||||
|
"tray": {
|
||||||
|
"spacing": 10
|
||||||
|
}
|
||||||
|
}
|
||||||
|
'';
|
||||||
|
|
||||||
|
# Create Waybar style
|
||||||
|
environment.etc."xdg/waybar/style.css".text = ''
|
||||||
|
* {
|
||||||
|
border: none;
|
||||||
|
border-radius: 0;
|
||||||
|
font-family: "JetBrainsMono Nerd Font", Roboto, Helvetica, Arial, sans-serif;
|
||||||
|
font-size: 13px;
|
||||||
|
min-height: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
window#waybar {
|
||||||
|
background-color: rgba(43, 48, 59, 0.5);
|
||||||
|
border-bottom: 3px solid rgba(100, 149, 237, 0.5);
|
||||||
|
color: #ffffff;
|
||||||
|
transition-property: background-color;
|
||||||
|
transition-duration: .5s;
|
||||||
|
}
|
||||||
|
|
||||||
|
window#waybar.hidden {
|
||||||
|
opacity: 0.2;
|
||||||
|
}
|
||||||
|
|
||||||
|
#workspaces button {
|
||||||
|
padding: 0 5px;
|
||||||
|
background-color: transparent;
|
||||||
|
color: #ffffff;
|
||||||
|
border-bottom: 3px solid transparent;
|
||||||
|
}
|
||||||
|
|
||||||
|
#workspaces button:hover {
|
||||||
|
background: rgba(0, 0, 0, 0.2);
|
||||||
|
box-shadow: inherit;
|
||||||
|
border-bottom: 3px solid #ffffff;
|
||||||
|
}
|
||||||
|
|
||||||
|
#workspaces button.active {
|
||||||
|
background-color: #285577;
|
||||||
|
border-bottom: 3px solid #ffffff;
|
||||||
|
}
|
||||||
|
|
||||||
|
#workspaces button.urgent {
|
||||||
|
background-color: #eb4d4b;
|
||||||
|
}
|
||||||
|
|
||||||
|
#mode {
|
||||||
|
background-color: #64727d;
|
||||||
|
border-bottom: 3px solid #ffffff;
|
||||||
|
}
|
||||||
|
|
||||||
|
#clock,
|
||||||
|
#battery,
|
||||||
|
#cpu,
|
||||||
|
#memory,
|
||||||
|
#disk,
|
||||||
|
#temperature,
|
||||||
|
#backlight,
|
||||||
|
#network,
|
||||||
|
#pulseaudio,
|
||||||
|
#custom-media,
|
||||||
|
#tray,
|
||||||
|
#mode,
|
||||||
|
#idle_inhibitor,
|
||||||
|
#mpd {
|
||||||
|
padding: 0 10px;
|
||||||
|
margin: 0 4px;
|
||||||
|
color: #ffffff;
|
||||||
|
}
|
||||||
|
|
||||||
|
#window,
|
||||||
|
#workspaces {
|
||||||
|
margin: 0 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.modules-left > widget:first-child > #workspaces {
|
||||||
|
margin-left: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.modules-right > widget:last-child > #workspaces {
|
||||||
|
margin-right: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#clock {
|
||||||
|
background-color: #64727d;
|
||||||
|
}
|
||||||
|
|
||||||
|
#battery {
|
||||||
|
background-color: #ffffff;
|
||||||
|
color: #000000;
|
||||||
|
}
|
||||||
|
|
||||||
|
#battery.charging, #battery.plugged {
|
||||||
|
color: #ffffff;
|
||||||
|
background-color: #26a65b;
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes blink {
|
||||||
|
to {
|
||||||
|
background-color: #ffffff;
|
||||||
|
color: #000000;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#battery.critical:not(.charging) {
|
||||||
|
background-color: #f53c3c;
|
||||||
|
color: #ffffff;
|
||||||
|
animation-name: blink;
|
||||||
|
animation-duration: 0.5s;
|
||||||
|
animation-timing-function: linear;
|
||||||
|
animation-iteration-count: infinite;
|
||||||
|
animation-direction: alternate;
|
||||||
|
}
|
||||||
|
|
||||||
|
#battery.warning {
|
||||||
|
background-color: #f39c12;
|
||||||
|
color: #ffffff;
|
||||||
|
}
|
||||||
|
|
||||||
|
label:focus {
|
||||||
|
background-color: #000000;
|
||||||
|
}
|
||||||
|
|
||||||
|
#network.disconnected {
|
||||||
|
background-color: #53a2ba;
|
||||||
|
}
|
||||||
|
|
||||||
|
#pulseaudio.muted {
|
||||||
|
background-color: #90b1b1;
|
||||||
|
}
|
||||||
|
|
||||||
|
#temperature.critical {
|
||||||
|
background-color: #eb4d4b;
|
||||||
|
}
|
||||||
|
|
||||||
|
#tray > .passive {
|
||||||
|
-gtk-icon-effect: dim;
|
||||||
|
}
|
||||||
|
|
||||||
|
#tray > .needs-attention {
|
||||||
|
-gtk-icon-effect: highlight;
|
||||||
|
}
|
||||||
|
'';
|
||||||
|
|
||||||
|
# Create Dunst configuration
|
||||||
|
environment.etc."xdg/dunst/dunstrc".text = ''
|
||||||
|
[global]
|
||||||
|
font = "JetBrainsMono Nerd Font 10"
|
||||||
|
markup = yes
|
||||||
|
format = "<b>%s</b>\\n%b"
|
||||||
|
sort = yes
|
||||||
|
indicate_hidden = yes
|
||||||
|
alignment = left
|
||||||
|
show_age_threshold = 60
|
||||||
|
word_wrap = yes
|
||||||
|
ignore_newline = no
|
||||||
|
geometry = "300x5-30+20"
|
||||||
|
transparency = 10
|
||||||
|
idle_threshold = 120
|
||||||
|
monitor = 0
|
||||||
|
follow = mouse
|
||||||
|
sticky_history = yes
|
||||||
|
line_height = 0
|
||||||
|
separator_height = 2
|
||||||
|
padding = 8
|
||||||
|
horizontal_padding = 8
|
||||||
|
separator_color = frame
|
||||||
|
startup_notification = false
|
||||||
|
dmenu = /usr/bin/dmenu
|
||||||
|
browser = /usr/bin/xdg-open
|
||||||
|
always_run_script = true
|
||||||
|
title = Dunst
|
||||||
|
class = Dunst
|
||||||
|
corner_radius = 0
|
||||||
|
force_xinerama = false
|
||||||
|
mouse_left_click = close_current
|
||||||
|
mouse_middle_click = do_action
|
||||||
|
mouse_right_click = close_all
|
||||||
|
|
||||||
|
[shortcuts]
|
||||||
|
close = ctrl+space
|
||||||
|
close_all = ctrl+shift+space
|
||||||
|
history = ctrl+grave
|
||||||
|
context = ctrl+shift+period
|
||||||
|
|
||||||
|
[urgency_low]
|
||||||
|
timeout = 10
|
||||||
|
background = "#222222"
|
||||||
|
foreground = "#888888"
|
||||||
|
frame_color = "#3b7c7c"
|
||||||
|
|
||||||
|
[urgency_normal]
|
||||||
|
timeout = 10
|
||||||
|
background = "#285577"
|
||||||
|
foreground = "#ffffff"
|
||||||
|
frame_color = "#4c7899"
|
||||||
|
|
||||||
|
[urgency_critical]
|
||||||
|
timeout = 0
|
||||||
|
background = "#900000"
|
||||||
|
foreground = "#ffffff"
|
||||||
|
frame_color = "#ff0000"
|
||||||
|
'';
|
||||||
|
|
||||||
|
# Create Alacritty configuration with transparency
|
||||||
|
environment.etc."xdg/alacritty/alacritty.yml".text = ''
|
||||||
|
# Alacritty Configuration
|
||||||
|
# Colors (Tokyo Night theme)
|
||||||
|
colors:
|
||||||
|
primary:
|
||||||
|
background: '#1a1b26'
|
||||||
|
foreground: '#c0caf5'
|
||||||
|
cursor:
|
||||||
|
text: '#1a1b26'
|
||||||
|
cursor: '#c0caf5'
|
||||||
|
normal:
|
||||||
|
black: '#15161e'
|
||||||
|
red: '#f7768e'
|
||||||
|
green: '#9ece6a'
|
||||||
|
yellow: '#e0af68'
|
||||||
|
blue: '#7aa2f7'
|
||||||
|
magenta: '#bb9af7'
|
||||||
|
cyan: '#7dcfff'
|
||||||
|
white: '#a9b1d6'
|
||||||
|
bright:
|
||||||
|
black: '#414868'
|
||||||
|
red: '#f7768e'
|
||||||
|
green: '#9ece6a'
|
||||||
|
yellow: '#e0af68'
|
||||||
|
blue: '#7aa2f7'
|
||||||
|
magenta: '#bb9af7'
|
||||||
|
cyan: '#7dcfff'
|
||||||
|
white: '#c0caf5'
|
||||||
|
|
||||||
|
# Window settings
|
||||||
|
window:
|
||||||
|
opacity: 0.85
|
||||||
|
background_opacity: 0.85
|
||||||
|
decorations: buttonless
|
||||||
|
padding:
|
||||||
|
x: 10
|
||||||
|
y: 10
|
||||||
|
dynamic_padding: true
|
||||||
|
startup_mode: Maximized
|
||||||
|
|
||||||
|
# Font settings
|
||||||
|
font:
|
||||||
|
normal:
|
||||||
|
family: JetBrainsMono Nerd Font
|
||||||
|
style: Regular
|
||||||
|
bold:
|
||||||
|
family: JetBrainsMono Nerd Font
|
||||||
|
style: Bold
|
||||||
|
italic:
|
||||||
|
family: JetBrainsMono Nerd Font
|
||||||
|
style: Italic
|
||||||
|
size: 12.0
|
||||||
|
|
||||||
|
# Cursor settings
|
||||||
|
cursor:
|
||||||
|
style: Block
|
||||||
|
unfocused_hollow: true
|
||||||
|
|
||||||
|
# Selection settings
|
||||||
|
selection:
|
||||||
|
save_to_clipboard: true
|
||||||
|
|
||||||
|
# Scrolling
|
||||||
|
scrolling:
|
||||||
|
history: 10000
|
||||||
|
multiplier: 3
|
||||||
|
|
||||||
|
# Live config reload
|
||||||
|
live_config_reload: true
|
||||||
|
|
||||||
|
# Shell integration
|
||||||
|
shell:
|
||||||
|
args:
|
||||||
|
- -l
|
||||||
|
|
||||||
|
# Key bindings
|
||||||
|
key_bindings:
|
||||||
|
- { key: V, mods: Control|Shift, action: Paste }
|
||||||
|
- { key: C, mods: Control|Shift, action: Copy }
|
||||||
|
- { key: Key0, mods: Control, action: ResetFontSize }
|
||||||
|
- { key: Equals, mods: Control, action: IncreaseFontSize }
|
||||||
|
- { key: Minus, mods: Control, action: DecreaseFontSize }
|
||||||
|
|
||||||
|
# Arrow key navigation (for applications that support it)
|
||||||
|
- { key: Up, action: ScrollLineUp }
|
||||||
|
- { key: Down, action: ScrollLineDown }
|
||||||
|
- { key: PageUp, action: ScrollPageUp }
|
||||||
|
- { key: PageDown, action: ScrollPageDown }
|
||||||
|
|
||||||
|
# Home/End keys
|
||||||
|
- { key: Home, action: ScrollToTop }
|
||||||
|
- { key: End, action: ScrollToBottom }
|
||||||
|
'';
|
||||||
|
}
|
||||||
53
os/system/desktop/hyprland.nix
Normal file
53
os/system/desktop/hyprland.nix
Normal file
@@ -0,0 +1,53 @@
|
|||||||
|
{ pkgs, ... }: {
|
||||||
|
imports = [
|
||||||
|
./hyprland-config.nix
|
||||||
|
];
|
||||||
|
|
||||||
|
services.xserver = {
|
||||||
|
enable = true;
|
||||||
|
xkb.layout = "ch";
|
||||||
|
xkb.variant = "";
|
||||||
|
};
|
||||||
|
|
||||||
|
# Hyprland configuration
|
||||||
|
programs.hyprland = {
|
||||||
|
enable = true;
|
||||||
|
xwayland.enable = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
# Enable wayland support
|
||||||
|
environment.sessionVariables = {
|
||||||
|
NIXOS_OZONE_WL = "1";
|
||||||
|
};
|
||||||
|
|
||||||
|
# Additional packages for Hyprland
|
||||||
|
environment.systemPackages = with pkgs; [
|
||||||
|
# Waybar for status bar
|
||||||
|
waybar
|
||||||
|
# Notification daemon
|
||||||
|
dunst
|
||||||
|
# Screenshot tool
|
||||||
|
grim
|
||||||
|
slurp
|
||||||
|
# Color picker
|
||||||
|
hyprpicker
|
||||||
|
# Wallpaper utility
|
||||||
|
swww
|
||||||
|
# Clipboard manager
|
||||||
|
wl-clipboard
|
||||||
|
# Terminal
|
||||||
|
alacritty
|
||||||
|
# Application launcher
|
||||||
|
wofi
|
||||||
|
# File manager
|
||||||
|
xfce.thunar
|
||||||
|
# Volume control
|
||||||
|
pavucontrol
|
||||||
|
# Clipboard history
|
||||||
|
cliphist
|
||||||
|
# Brightness control
|
||||||
|
brightnessctl
|
||||||
|
# Power management
|
||||||
|
power-profiles-daemon
|
||||||
|
];
|
||||||
|
}
|
||||||
@@ -1,11 +1,11 @@
|
|||||||
{ pkgs, ... }: {
|
{ pkgs, ... }: {
|
||||||
networking = {
|
networking = {
|
||||||
hostName = "nixos";
|
hostName = "nixos";
|
||||||
nameservers = [ "192.168.1.1" "192.168.2.1" "9.9.9.9" "2620:fe::fe" ];
|
#nameservers = [ "192.168.1.1" "10.0.0.1" "10.0.1.1" "9.9.9.9" "2620:fe::fe" ];
|
||||||
#nameservers = [ "127.0.0.1" ];
|
#nameservers = [ "127.0.0.1" ];
|
||||||
networkmanager = {
|
networkmanager = {
|
||||||
enable = true;
|
enable = true;
|
||||||
dns = "none";
|
#dns = "none";
|
||||||
};
|
};
|
||||||
firewall = {
|
firewall = {
|
||||||
enable = true;
|
enable = true;
|
||||||
|
|||||||
@@ -64,8 +64,32 @@ in
|
|||||||
code-cursor
|
code-cursor
|
||||||
go
|
go
|
||||||
gnomeExtensions.forge
|
gnomeExtensions.forge
|
||||||
|
platformio
|
||||||
|
avrdude
|
||||||
|
#python314
|
||||||
|
python312
|
||||||
|
esptool
|
||||||
|
wireguard-tools
|
||||||
|
protonvpn-gui
|
||||||
|
uv
|
||||||
|
portaudio
|
||||||
|
python312Packages.pyaudio
|
||||||
];
|
];
|
||||||
|
|
||||||
|
programs.nix-ld.enable = true;
|
||||||
|
|
||||||
|
programs.nix-ld.libraries = with pkgs; [
|
||||||
|
uv
|
||||||
|
portaudio
|
||||||
|
];
|
||||||
|
# for protonvpn
|
||||||
|
networking.firewall.checkReversePath = false;
|
||||||
|
|
||||||
|
services.udev.packages = [
|
||||||
|
pkgs.platformio-core
|
||||||
|
pkgs.platformio-core.udev
|
||||||
|
pkgs.openocd
|
||||||
|
];
|
||||||
services.logind.extraConfig = ''
|
services.logind.extraConfig = ''
|
||||||
RuntimeDirectorySize=20G
|
RuntimeDirectorySize=20G
|
||||||
'';
|
'';
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
isNormalUser = true;
|
isNormalUser = true;
|
||||||
description = "master";
|
description = "master";
|
||||||
initialPassword = "master";
|
initialPassword = "master";
|
||||||
extraGroups = [ "networkmanager" "wheel" "docker" "plugdev" ];
|
extraGroups = [ "networkmanager" "wheel" "docker" "plugdev" "tty" "dialout" "audio"];
|
||||||
};
|
};
|
||||||
|
|
||||||
home-manager.users.master = {
|
home-manager.users.master = {
|
||||||
@@ -17,6 +17,7 @@
|
|||||||
#kdeconnect
|
#kdeconnect
|
||||||
#kcalc
|
#kcalc
|
||||||
#filelight
|
#filelight
|
||||||
|
ghostty
|
||||||
gparted
|
gparted
|
||||||
veracrypt
|
veracrypt
|
||||||
#nerdfonts
|
#nerdfonts
|
||||||
@@ -40,6 +41,7 @@
|
|||||||
#solana-cli
|
#solana-cli
|
||||||
sqlite
|
sqlite
|
||||||
rtl-sdr
|
rtl-sdr
|
||||||
|
gopls
|
||||||
];
|
];
|
||||||
|
|
||||||
programs = {
|
programs = {
|
||||||
@@ -59,13 +61,13 @@
|
|||||||
directory.truncation_length = 2;
|
directory.truncation_length = 2;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
neovim = {
|
#neovim = {
|
||||||
enable = true;
|
# enable = true;
|
||||||
defaultEditor = true;
|
# defaultEditor = true;
|
||||||
viAlias = true;
|
# viAlias = true;
|
||||||
vimAlias = true;
|
# vimAlias = true;
|
||||||
vimdiffAlias = true;
|
# vimdiffAlias = true;
|
||||||
};
|
#};
|
||||||
};
|
};
|
||||||
|
|
||||||
services = {
|
services = {
|
||||||
|
|||||||
Reference in New Issue
Block a user