mirror of
https://git.sr.ht/~rouven/nixos-config
synced 2024-11-15 13:23:11 +01:00
commit
79ca310f6f
|
@ -4,12 +4,12 @@
|
|||
|
||||
## Specs
|
||||
- **Operating System:** [NixOS](https://nixos.org)
|
||||
- **Window Manager:** [Hyprland](https://hyprland.org/)
|
||||
- **Window Manager:** [Sway](https://swaywm.org/)
|
||||
- **Overall Theme:** [Base16 Dracula](https://github.com/dracula/base16-dracula-scheme)
|
||||
- **Shell:** [Zsh](https://www.zsh.org/)
|
||||
- **Terminal:** [Foot](https://codeberg.org/dnkl/foot)
|
||||
- **Editor:** [Helix](https://helix-editor.com)
|
||||
- **Notifications:** [Mako](https://github.com/emersion/mako)
|
||||
- **Notifications:** [swaync](https://github.com/ErikReider/SwayNotificationCenter)
|
||||
- **Panel:** [Waybar](https://github.com/Alexays/Waybar)
|
||||
- **File Manager:** [Vifm](https://vifm.info/)
|
||||
|
||||
|
|
120
flake.lock
120
flake.lock
|
@ -165,11 +165,11 @@
|
|||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1685885003,
|
||||
"narHash": "sha256-+OB0EvZBfGvnlTGg6mtyUCqkMnUp9DkmRUU4d7BZBVE=",
|
||||
"lastModified": 1685999310,
|
||||
"narHash": "sha256-gaRMZhc7z4KeU/xS3IWv3kC+WhVcAXOLXXGKLe5zn1Y=",
|
||||
"owner": "nix-community",
|
||||
"repo": "home-manager",
|
||||
"rev": "607d8fad96436b134424b9935166a7cd0884003e",
|
||||
"rev": "28614ed7a1e3ace824c122237bdc0e5e0b62c5c3",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
@ -177,48 +177,6 @@
|
|||
"type": "indirect"
|
||||
}
|
||||
},
|
||||
"hyprland": {
|
||||
"inputs": {
|
||||
"hyprland-protocols": "hyprland-protocols",
|
||||
"nixpkgs": "nixpkgs",
|
||||
"wlroots": "wlroots",
|
||||
"xdph": "xdph"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1685951361,
|
||||
"narHash": "sha256-Hx9yVkyEjVf5ohiWW2HmSuGgxDaVOqGLMIGSz/HV6f8=",
|
||||
"owner": "hyprwm",
|
||||
"repo": "Hyprland",
|
||||
"rev": "1a4e6e6a4b3272118a51bebb4a45ecd642383209",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "hyprwm",
|
||||
"repo": "Hyprland",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"hyprland-protocols": {
|
||||
"inputs": {
|
||||
"nixpkgs": [
|
||||
"hyprland",
|
||||
"nixpkgs"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1684265364,
|
||||
"narHash": "sha256-AxNnWbthsuNx73HDQr0eBxrcE3+yfl/WsaXZqUFmkpQ=",
|
||||
"owner": "hyprwm",
|
||||
"repo": "hyprland-protocols",
|
||||
"rev": "8c279b9fb0f2b031427dc5ef4eab53f2ed835530",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "hyprwm",
|
||||
"repo": "hyprland-protocols",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"images": {
|
||||
"inputs": {
|
||||
"nixpkgs": [
|
||||
|
@ -336,18 +294,17 @@
|
|||
},
|
||||
"nixpkgs": {
|
||||
"locked": {
|
||||
"lastModified": 1685655444,
|
||||
"narHash": "sha256-6EujQNAeaUkWvpEZZcVF8qSfQrNVWFNNGbUJxv/A5a8=",
|
||||
"lastModified": 1685931219,
|
||||
"narHash": "sha256-8EWeOZ6LKQfgAjB/USffUSELPRjw88A+xTcXnOUvO5M=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "e635192892f5abbc2289eaac3a73cdb249abaefd",
|
||||
"rev": "7409480d5c8584a1a83c422530419efe4afb0d19",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "NixOS",
|
||||
"id": "nixpkgs",
|
||||
"ref": "nixos-unstable",
|
||||
"repo": "nixpkgs",
|
||||
"type": "github"
|
||||
"type": "indirect"
|
||||
}
|
||||
},
|
||||
"nixpkgs-22_11": {
|
||||
|
@ -412,21 +369,6 @@
|
|||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs_2": {
|
||||
"locked": {
|
||||
"lastModified": 1685931219,
|
||||
"narHash": "sha256-8EWeOZ6LKQfgAjB/USffUSELPRjw88A+xTcXnOUvO5M=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "7409480d5c8584a1a83c422530419efe4afb0d19",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"id": "nixpkgs",
|
||||
"ref": "nixos-unstable",
|
||||
"type": "indirect"
|
||||
}
|
||||
},
|
||||
"pre-commit-hooks-nix": {
|
||||
"inputs": {
|
||||
"flake-compat": [
|
||||
|
@ -481,13 +423,12 @@
|
|||
"root": {
|
||||
"inputs": {
|
||||
"home-manager": "home-manager",
|
||||
"hyprland": "hyprland",
|
||||
"impermanence": "impermanence",
|
||||
"lanzaboote": "lanzaboote",
|
||||
"nix-colors": "nix-colors",
|
||||
"nix-index-database": "nix-index-database",
|
||||
"nixos-hardware": "nixos-hardware",
|
||||
"nixpkgs": "nixpkgs_2",
|
||||
"nixpkgs": "nixpkgs",
|
||||
"purge": "purge",
|
||||
"simple-nixos-mailserver": "simple-nixos-mailserver",
|
||||
"sops-nix": "sops-nix",
|
||||
|
@ -613,49 +554,6 @@
|
|||
"repo": "flake-utils",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"wlroots": {
|
||||
"flake": false,
|
||||
"locked": {
|
||||
"host": "gitlab.freedesktop.org",
|
||||
"lastModified": 1685803001,
|
||||
"narHash": "sha256-yxq/U9zL1ssFZtgT27A96UKteCiKb3zSmbA/dokK76U=",
|
||||
"owner": "wlroots",
|
||||
"repo": "wlroots",
|
||||
"rev": "b61d5922f1d0910a848deb100570ad8587aea38d",
|
||||
"type": "gitlab"
|
||||
},
|
||||
"original": {
|
||||
"host": "gitlab.freedesktop.org",
|
||||
"owner": "wlroots",
|
||||
"repo": "wlroots",
|
||||
"type": "gitlab"
|
||||
}
|
||||
},
|
||||
"xdph": {
|
||||
"inputs": {
|
||||
"hyprland-protocols": [
|
||||
"hyprland",
|
||||
"hyprland-protocols"
|
||||
],
|
||||
"nixpkgs": [
|
||||
"hyprland",
|
||||
"nixpkgs"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1685385764,
|
||||
"narHash": "sha256-r+XMyOoRXq+hlfjayb+fyi9kq2JK48TrwuNIAXqlj7U=",
|
||||
"owner": "hyprwm",
|
||||
"repo": "xdg-desktop-portal-hyprland",
|
||||
"rev": "4d9ff0c17716936e0b5ca577a39e263633901ed1",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "hyprwm",
|
||||
"repo": "xdg-desktop-portal-hyprland",
|
||||
"type": "github"
|
||||
}
|
||||
}
|
||||
},
|
||||
"root": "root",
|
||||
|
|
|
@ -21,7 +21,6 @@
|
|||
};
|
||||
|
||||
nix-colors.url = "github:Misterio77/nix-colors";
|
||||
hyprland.url = "github:hyprwm/Hyprland";
|
||||
|
||||
purge = {
|
||||
url = "github:therealr5/purge";
|
||||
|
@ -49,7 +48,6 @@
|
|||
, nixpkgs
|
||||
, home-manager
|
||||
, nix-index-database
|
||||
, hyprland
|
||||
, sops-nix
|
||||
, impermanence
|
||||
, nix-colors
|
||||
|
@ -87,7 +85,6 @@
|
|||
home-manager.users.rouven = {
|
||||
imports = [
|
||||
nix-colors.homeManagerModules.default
|
||||
hyprland.homeManagerModules.default
|
||||
sops-nix.homeManagerModules.sops
|
||||
];
|
||||
};
|
||||
|
|
|
@ -101,7 +101,7 @@
|
|||
xdg.portal = {
|
||||
enable = true;
|
||||
extraPortals = [
|
||||
pkgs.xdg-desktop-portal-hyprland
|
||||
pkgs.xdg-desktop-portal-wlr
|
||||
];
|
||||
};
|
||||
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
enable = true;
|
||||
settings = {
|
||||
default_session = {
|
||||
command = "${pkgs.greetd.tuigreet}/bin/tuigreet --cmd Hyprland";
|
||||
command = "${pkgs.greetd.tuigreet}/bin/tuigreet --cmd sway";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
|
|
@ -2,11 +2,9 @@
|
|||
{
|
||||
nix.settings = {
|
||||
substituters = [
|
||||
"https://hyprland.cachix.org"
|
||||
"https://cache.rfive.de"
|
||||
];
|
||||
trusted-public-keys = [
|
||||
"hyprland.cachix.org-1:a7pgxzMz7+chwVL3/pzj6jIBMioiJM7ypFP8PwtkuGc="
|
||||
"cache.rfive.de:2E/yzJduGj4SJqYqDhpXO7aM2m5buMMUHN64EZdml3I="
|
||||
];
|
||||
};
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
./git
|
||||
./gpg
|
||||
./helix
|
||||
./hyprland
|
||||
./sway
|
||||
./mpv
|
||||
./sops
|
||||
./spotify
|
||||
|
|
|
@ -22,7 +22,7 @@
|
|||
colors = config.colorScheme.colors;
|
||||
in
|
||||
{
|
||||
alpha = if (config.colorScheme.kind == "dark") then 0.0 else 1.0;
|
||||
# alpha = if (config.colorScheme.kind == "dark") then 0.0 else 1.0;
|
||||
background = colors.base00;
|
||||
foreground = colors.base05;
|
||||
regular0 = colors.base02;
|
||||
|
|
|
@ -1,77 +0,0 @@
|
|||
{ config, pkgs, ... }:
|
||||
{
|
||||
imports = [
|
||||
./hyprpaper.nix
|
||||
./session.nix
|
||||
./waybar.nix
|
||||
];
|
||||
wayland.windowManager.hyprland = {
|
||||
enable = true;
|
||||
extraConfig = builtins.readFile ./hyprland.conf; # todo nix config when available
|
||||
recommendedEnvironment = true;
|
||||
};
|
||||
|
||||
home.sessionVariables = {
|
||||
GRIM_DEFAULT_DIR = "~/Pictures/Screenshots/";
|
||||
};
|
||||
home.packages = with pkgs; [
|
||||
pulseaudio # installed to have pactl
|
||||
jq
|
||||
libnotify
|
||||
fuzzel
|
||||
wl-clipboard
|
||||
grim
|
||||
slurp
|
||||
swappy
|
||||
];
|
||||
|
||||
xdg.configFile = {
|
||||
"fuzzel/fuzzel.ini".text = ''
|
||||
[main]
|
||||
icon-theme=${config.gtk.iconTheme.name}
|
||||
show-actions=yes
|
||||
width=80
|
||||
terminal=${pkgs.foot}/bin/foot
|
||||
|
||||
[colors]
|
||||
background=${config.colorScheme.colors.base00}ff
|
||||
text=${config.colorScheme.colors.base05}ff
|
||||
match=${config.colorScheme.colors.base08}ff
|
||||
selection=${config.colorScheme.colors.base02}ff
|
||||
selection-text=${config.colorScheme.colors.base04}ff
|
||||
border=${config.colorScheme.colors.base01}ff
|
||||
'';
|
||||
|
||||
"swappy/config".text = ''
|
||||
[Default]
|
||||
save_dir = ~/Pictures/Screenshots/
|
||||
early_exit = true
|
||||
'';
|
||||
"mako/do-not-disturb.sh".text = ''
|
||||
if [[ $(makoctl mode) = 'default' ]];then
|
||||
notify-send 'Enabled Do Not Disturb mode'
|
||||
sleep 3
|
||||
makoctl mode -s do-not-disturb
|
||||
else
|
||||
makoctl mode -s default
|
||||
notify-send 'Disabled Do Not Disturb mode'
|
||||
fi
|
||||
'';
|
||||
};
|
||||
|
||||
services.mako = {
|
||||
enable = true;
|
||||
backgroundColor = "#${config.colorScheme.colors.base02}FF";
|
||||
borderRadius = 20;
|
||||
textColor = "#${config.colorScheme.colors.base05}FF";
|
||||
layer = "overlay";
|
||||
defaultTimeout = 10000;
|
||||
extraConfig = ''
|
||||
[urgency=high]
|
||||
background-color=#${config.colorScheme.colors.base08}
|
||||
default-timeout=0
|
||||
[mode=do-not-disturb]
|
||||
invisible=1
|
||||
'';
|
||||
};
|
||||
}
|
|
@ -1,142 +0,0 @@
|
|||
# See https://wiki.hyprland.org/Configuring/Monitors/
|
||||
monitor=eDP-1, 1920x1080, 0x0, 1
|
||||
# For all categories, see https://wiki.hyprland.org/Configuring/Variables/
|
||||
input {
|
||||
kb_layout = us
|
||||
kb_variant = dvorak-alt-intl
|
||||
|
||||
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
|
||||
}
|
||||
|
||||
decoration {
|
||||
# See https://wiki.hyprland.org/Configuring/Variables/ for more
|
||||
|
||||
rounding = 10
|
||||
blur = yes
|
||||
blur_size = 4
|
||||
blur_passes = 2
|
||||
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 = 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
|
||||
new_is_master = true
|
||||
}
|
||||
|
||||
# See https://wiki.hyprland.org/Configuring/Keywords/ for more
|
||||
$mainMod = SUPER
|
||||
|
||||
# Example binds, see https://wiki.hyprland.org/Configuring/Binds/ for more
|
||||
bind = $mainMod, Return, exec, footclient
|
||||
bind = $mainMod SHIFT, Q, killactive,
|
||||
bind = $mainMod, Space, togglefloating,
|
||||
bind = $mainMod, F, fullscreen, 0 # fullscreen
|
||||
bind = $mainMod, M, fullscreen, 1 # maximize
|
||||
bind = $mainMod SHIFT, F, fakefullscreen, 0
|
||||
bind = $mainMod, O, swapactiveworkspaces, 0 1
|
||||
bind = $mainMod, U, focusurgentorlast
|
||||
bind = ALT, Space, exec, fuzzel
|
||||
|
||||
bind = $mainMod, S, togglesplit, # dwindlr
|
||||
|
||||
# Move focus with mainMod + arrow keys
|
||||
bind = $mainMod, H, movefocus, l
|
||||
bind = $mainMod, L, movefocus, r
|
||||
bind = $mainMod, K, movefocus, u
|
||||
bind = $mainMod, J, movefocus, d
|
||||
|
||||
# Switch workspaces with mainMod + [0-9]
|
||||
bind = $mainMod, 1, workspace, 1
|
||||
bind = $mainMod, 2, workspace, 2
|
||||
bind = $mainMod, 3, workspace, 3
|
||||
bind = $mainMod, 4, workspace, 4
|
||||
bind = $mainMod, 5, workspace, 5
|
||||
bind = $mainMod, 6, workspace, 6
|
||||
bind = $mainMod, 7, workspace, 7
|
||||
bind = $mainMod, 8, workspace, 8
|
||||
bind = $mainMod, 9, workspace, 9
|
||||
bind = $mainMod, 0, workspace, 10
|
||||
|
||||
# Move active window to a workspace with mainMod + SHIFT + [0-9]
|
||||
bind = $mainMod SHIFT, 1, movetoworkspace, 1
|
||||
bind = $mainMod SHIFT, 2, movetoworkspace, 2
|
||||
bind = $mainMod SHIFT, 3, movetoworkspace, 3
|
||||
bind = $mainMod SHIFT, 4, movetoworkspace, 4
|
||||
bind = $mainMod SHIFT, 5, movetoworkspace, 5
|
||||
bind = $mainMod SHIFT, 6, movetoworkspace, 6
|
||||
bind = $mainMod SHIFT, 7, movetoworkspace, 7
|
||||
bind = $mainMod SHIFT, 8, movetoworkspace, 8
|
||||
bind = $mainMod SHIFT, 9, movetoworkspace, 9
|
||||
bind = $mainMod SHIFT, 0, movetoworkspace, 10
|
||||
|
||||
# Scroll through existing workspaces wiswaylockth mainMod + scroll
|
||||
bind = $mainMod, mouse_down, workspace, e+1
|
||||
bind = $mainMod, mouse_up, workspace, e-1
|
||||
|
||||
# Move/resize windows with mainMod + LMB/RMB and dragging
|
||||
bindm = $mainMod, mouse:272, movewindow
|
||||
bindm = $mainMod, mouse:273, resizewindow
|
||||
|
||||
# All the fancy XF86 Keys
|
||||
bind = ,Print, exec, grim -g "$(slurp)" - | wl-copy -t image/png
|
||||
bind = ,XF86Launch2, exec, grim -g "$(slurp)" - | swappy -f -
|
||||
binde = ,XF86MonBrightnessUp, exec, light -A 10
|
||||
binde = ,XF86MonBrightnessDown, exec, light -U 10
|
||||
bind = ,XF86AudioMute, exec, pactl set-sink-mute @DEFAULT_SINK@ toggle
|
||||
bind = ,XF86AudioMicMute, exec, pactl set-source-mute @DEFAULT_SOURCE@ toggle
|
||||
binde = ,XF86AudioRaiseVolume, exec, pactl set-sink-volume @DEFAULT_SINK@ +5%
|
||||
binde = ,XF86AudioLowerVolume, exec, pactl set-sink-volume @DEFAULT_SINK@ -5%
|
||||
binde = SHIFT, XF86AudioRaiseVolume, exec, pactl set-source-volume @DEFAULT_SOURCE@ +5%
|
||||
binde = SHIFT, XF86AudioLowerVolume, exec, pactl set-source-volume @DEFAULT_SOURCE@ -5%
|
||||
|
||||
# even more fancy stuff (aka abusing XF86 keys)
|
||||
bind = ,XF86Messenger, exec, makoctl dismiss
|
||||
bind = SHIFT ,XF86Messenger, exec, makoctl restore
|
||||
bind = ,XF86Go, exec, makoctl invoke
|
||||
bind = ,Cancel, exec, sh ~/.config/mako/do-not-disturb.sh
|
||||
bind = ,XF86Display, exec, hyprpaper
|
||||
bind = ,XF86Favorites, exec, loginctl lock-session
|
||||
bind = ,XF86PowerOff, exec, wlogout
|
|
@ -1,24 +0,0 @@
|
|||
{ pkgs, ... }:
|
||||
{
|
||||
home.packages = with pkgs; [
|
||||
hyprpaper
|
||||
];
|
||||
xdg.configFile."hypr/hyprpaper.conf".text = ''
|
||||
preload = ${../../../../images/wallpaper.png}
|
||||
wallpaper =eDP-1, ${../../../../images/wallpaper.png}
|
||||
wallpaper =HDMI-A-1, ${../../../../images/wallpaper.png}
|
||||
'';
|
||||
systemd.user.services.hyprpaper = {
|
||||
Install.WantedBy = [ "graphical-session.target" ];
|
||||
Service = {
|
||||
ExecStart = "${pkgs.hyprpaper}/bin/hyprpaper";
|
||||
Restart = "on-failure";
|
||||
};
|
||||
Unit = {
|
||||
After = "graphical-session.target";
|
||||
Description = "Blazingly fast wayland wallpaper utility with IPC controls";
|
||||
Documentation = "https://github.com/hyprwm/hyprpaper";
|
||||
PartOf = "graphical-session.target";
|
||||
};
|
||||
};
|
||||
}
|
|
@ -0,0 +1,78 @@
|
|||
{ config, pkgs, lib, ... }:
|
||||
|
||||
{
|
||||
imports = [
|
||||
# ./hyprpaper.nix
|
||||
./session.nix
|
||||
./waybar.nix
|
||||
];
|
||||
wayland.windowManager.sway = {
|
||||
enable = true;
|
||||
config = rec {
|
||||
startup = [
|
||||
{
|
||||
command = "${pkgs.swaybg}/bin/swaybg -i ${../../../../images/wallpaper.png}";
|
||||
}
|
||||
];
|
||||
modifier = "Mod4";
|
||||
menu = "${pkgs.fuzzel}/bin/fuzzel";
|
||||
terminal = "${pkgs.foot}/bin/footclient";
|
||||
bars = [ ];
|
||||
gaps = {
|
||||
outer = 5;
|
||||
inner = 12;
|
||||
};
|
||||
input = {
|
||||
"*" = {
|
||||
xkb_layout = "us";
|
||||
xkb_variant = "dvorak-alt-intl";
|
||||
};
|
||||
};
|
||||
keybindings =
|
||||
lib.mkOptionDefault {
|
||||
"Mod1+space" = "exec ${menu}";
|
||||
"Print" = "exec ${pkgs.sway-contrib.grimshot}/bin/grimshot copy area";
|
||||
"XF86Launch2" = "exec ${pkgs.sway-contrib.grimshot}/bin/grimshot save area - | ${pkgs.swappy}/bin/swappy -f -";
|
||||
"XF86MonBrightnessUp" = "exec ${pkgs.light}/bin/light -A 10";
|
||||
"XF86MonBrightnessDown" = "exec ${pkgs.light}/bin/light -U 10";
|
||||
# audio controls
|
||||
"XF86AudioMute" = "exec ${pkgs.pulseaudio}/bin/pactl set-sink-mute @DEFAULT_SINK@ toggle";
|
||||
"XF86AudioMicMute" = "exec ${pkgs.pulseaudio}/bin/pactl set-source-mute @DEFAULT_SOURCE@ toggle";
|
||||
"XF86AudioRaiseVolume" = "exec ${pkgs.pulseaudio}/bin/pactl set-sink-volume @DEFAULT_SINK@ +5%";
|
||||
"XF86AudioLowerVolume" = "exec ${pkgs.pulseaudio}/bin/pactl set-sink-volume @DEFAULT_SINK@ -5%";
|
||||
"Shift+XF86AudioRaiseVolume" = "exec ${pkgs.pulseaudio}/bin/pactl set-source-volume @DEFAULT_SOURCE@ +5%";
|
||||
"Shift+XF86AudioLowerVolume" = "exec ${pkgs.pulseaudio}/bin/pactl set-source-volume @DEFAULT_SOURCE@ -5%";
|
||||
|
||||
"XF86Favorites" = "exec ${pkgs.systemd}/bin/loginctl lock-session";
|
||||
"XF86PowerOff" = "exec ${pkgs.wlogout}/bin/wlogout";
|
||||
|
||||
"XF86Messenger" = "exec ${pkgs.swaynotificationcenter}/bin/swaync-client --toggle-panel";
|
||||
"Cancel" = "exec ${pkgs.swaynotificationcenter}/bin/swaync-client --hide-latest";
|
||||
"Shift+Cancel" = "exec ${pkgs.swaynotificationcenter}/bin/swaync-client --cloes-all";
|
||||
};
|
||||
};
|
||||
};
|
||||
xdg.configFile = {
|
||||
"swaync".source = ./swaync;
|
||||
"fuzzel/fuzzel.ini".text = ''
|
||||
[main]
|
||||
icon-theme=${config.gtk.iconTheme.name}
|
||||
show-actions=yes
|
||||
width=80
|
||||
terminal=${pkgs.foot}/bin/foot
|
||||
|
||||
[colors]
|
||||
background=${config.colorScheme.colors.base00}ff
|
||||
text=${config.colorScheme.colors.base05}ff
|
||||
match=${config.colorScheme.colors.base08}ff
|
||||
selection=${config.colorScheme.colors.base02}ff
|
||||
selection-text=${config.colorScheme.colors.base04}ff
|
||||
border=${config.colorScheme.colors.base01}ff
|
||||
'';
|
||||
"swappy/config".text = ''
|
||||
[Default]
|
||||
save_dir = ~/Pictures/Screenshots/
|
||||
early_exit = true
|
||||
'';
|
||||
};
|
||||
}
|
|
@ -2,12 +2,13 @@
|
|||
{
|
||||
home.packages = with pkgs; [
|
||||
swaylock-effects
|
||||
wlogout
|
||||
wl-clipboard
|
||||
swaynotificationcenter
|
||||
playerctl
|
||||
];
|
||||
|
||||
services.swayidle = {
|
||||
enable = true;
|
||||
systemdTarget = "hyprland-session.target";
|
||||
events = [
|
||||
{ event = "before-sleep"; command = "${pkgs.swaylock-effects}/bin/swaylock"; }
|
||||
{ event = "lock"; command = "${pkgs.swaylock-effects}/bin/swaylock"; }
|
||||
|
@ -16,6 +17,20 @@
|
|||
{ timeout = 300; command = "${pkgs.swaylock-effects}/bin/swaylock"; }
|
||||
];
|
||||
};
|
||||
systemd.user.services.swaync = {
|
||||
Install.WantedBy = [ "graphical-session.target" ];
|
||||
Service = {
|
||||
ExecStart = "${pkgs.swaynotificationcenter}/bin/swaync";
|
||||
Restart = "on-failure";
|
||||
};
|
||||
Unit = {
|
||||
After = "graphical-session.target";
|
||||
Description = "Simple notification daemon with a GUI built for Sway";
|
||||
Documentation = "https://github.com/ErikReider/SwayNotificationCenter";
|
||||
PartOf = "graphical-session.target";
|
||||
};
|
||||
environment.PATH = "${pkgs.coreutils}/bin";
|
||||
};
|
||||
|
||||
xdg.configFile = {
|
||||
"swaylock/config".text = ''
|
54
users/rouven/modules/sway/swaync/config.json
Normal file
54
users/rouven/modules/sway/swaync/config.json
Normal file
|
@ -0,0 +1,54 @@
|
|||
{
|
||||
"$schema": "/etc/xdg/swaync/configSchema.json",
|
||||
|
||||
"positionX": "right",
|
||||
"positionY": "top",
|
||||
"control-center-margin-top": 20,
|
||||
"control-center-margin-bottom": 0,
|
||||
"control-center-margin-right": 20,
|
||||
"control-center-margin-left": 0,
|
||||
"control-center-width": 500,
|
||||
"control-center-height": 600,
|
||||
"fit-to-screen": false,
|
||||
|
||||
"layer": "top",
|
||||
"cssPriority": "user",
|
||||
"notification-icon-size": 64,
|
||||
"notification-body-image-height": 100,
|
||||
"notification-body-image-width": 200,
|
||||
"timeout": 10,
|
||||
"timeout-low": 5,
|
||||
"timeout-critical": 0,
|
||||
"notification-window-width": 500,
|
||||
"keyboard-shortcuts": true,
|
||||
"image-visibility": "when-available",
|
||||
"transition-time": 200,
|
||||
"hide-on-clear": true,
|
||||
"hide-on-action": true,
|
||||
"script-fail-notify": true,
|
||||
|
||||
"widgets": [
|
||||
"title",
|
||||
"dnd",
|
||||
"mpris",
|
||||
"notifications"
|
||||
],
|
||||
"widget-config": {
|
||||
"title": {
|
||||
"text": "Notifications",
|
||||
"clear-all-button": true,
|
||||
"button-text": "Clear All"
|
||||
},
|
||||
"dnd": {
|
||||
"text": "Do Not Disturb"
|
||||
},
|
||||
"label": {
|
||||
"max-lines": 5,
|
||||
"text": "Label Text"
|
||||
},
|
||||
"mpris": {
|
||||
"image-size": 96,
|
||||
"image-radius": 12
|
||||
}
|
||||
}
|
||||
}
|
297
users/rouven/modules/sway/swaync/style.css
Normal file
297
users/rouven/modules/sway/swaync/style.css
Normal file
|
@ -0,0 +1,297 @@
|
|||
/* Dracula Theme */
|
||||
@define-color foreground rgb(248, 248, 242);
|
||||
@define-color background rgb(40, 42, 54);
|
||||
@define-color background-alpha rgba(40, 42, 54, 0.8);
|
||||
@define-color accent rgba(189, 147, 249, 0.8);
|
||||
@define-color current-line rgb(68, 71, 90);
|
||||
@define-color comment rgb(98, 114, 164);
|
||||
|
||||
.notification-row {
|
||||
transition: all 200ms ease;
|
||||
outline: none;
|
||||
margin-bottom: 4px;
|
||||
margin-right: 13px;
|
||||
margin-top: 8px;
|
||||
border-radius: 80px;
|
||||
}
|
||||
|
||||
.control-center .notification-row:focus,
|
||||
.control-center .notification-row:hover {
|
||||
opacity: 1;
|
||||
background: transparent;
|
||||
}
|
||||
|
||||
.notification-row:focus .notification,
|
||||
.notification-row:hover .notification {
|
||||
box-shadow: 0 1px 3px 1px rgba(0, 0, 0, 0.5);
|
||||
border: 0px solid @accent;
|
||||
background: @current-line;
|
||||
}
|
||||
|
||||
.control-center .notification {
|
||||
box-shadow: none;
|
||||
}
|
||||
|
||||
.control-center .notification-row {
|
||||
opacity: 0.5;
|
||||
margin: -5px;
|
||||
}
|
||||
|
||||
.notification {
|
||||
transition: all 200ms ease;
|
||||
border-radius: 8px;
|
||||
margin: 12px 7px 0px 7px;
|
||||
box-shadow: 0 1px 3px 1px rgba(0, 0, 0, 0.5);
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
/* Uncomment to enable specific urgency colors
|
||||
.low {
|
||||
background: yellow;
|
||||
padding: 6px;
|
||||
border-radius: 12px;
|
||||
}
|
||||
|
||||
.normal {
|
||||
background: green;
|
||||
padding: 6px;
|
||||
border-radius: 12px;
|
||||
}
|
||||
|
||||
.critical {
|
||||
background: red;
|
||||
padding: 6px;
|
||||
border-radius: 12px;
|
||||
}
|
||||
*/
|
||||
|
||||
.notification-content {
|
||||
background: transparent;
|
||||
padding: 6px;
|
||||
border-radius: 8px;
|
||||
}
|
||||
|
||||
.close-button {
|
||||
background: @current-line;
|
||||
color: @foreground;
|
||||
text-shadow: none;
|
||||
padding: 0;
|
||||
border-radius: 100%;
|
||||
margin-top: 17px;
|
||||
margin-right: 10px;
|
||||
box-shadow: none;
|
||||
border: none;
|
||||
min-width: 24px;
|
||||
min-height: 24px;
|
||||
}
|
||||
|
||||
.close-button:hover {
|
||||
box-shadow: none;
|
||||
background: @comment;
|
||||
transition: all 0.15s ease-in-out;
|
||||
border: none;
|
||||
}
|
||||
|
||||
.notification-default-action,
|
||||
.notification-action {
|
||||
padding: 4px;
|
||||
margin: 0;
|
||||
box-shadow: none;
|
||||
background: @current-line;
|
||||
border: 2px solid @accent;
|
||||
color: @foreground;
|
||||
}
|
||||
|
||||
.notification-default-action:hover,
|
||||
.notification-action:hover {
|
||||
-gtk-icon-effect: none;
|
||||
background: @current-line;
|
||||
}
|
||||
|
||||
.notification-default-action {
|
||||
border-radius: 8px;
|
||||
}
|
||||
|
||||
/* When alternative actions are visible */
|
||||
.notification-default-action:not(:only-child) {
|
||||
border-bottom-left-radius: 0px;
|
||||
border-bottom-right-radius: 0px;
|
||||
}
|
||||
|
||||
.notification-action {
|
||||
border-radius: 0px;
|
||||
border-top: none;
|
||||
border-right: none;
|
||||
}
|
||||
|
||||
/* add bottom border radius to eliminate clipping */
|
||||
.notification-action:first-child {
|
||||
border-bottom-left-radius: 8px;
|
||||
}
|
||||
|
||||
.notification-action:last-child {
|
||||
border-bottom-right-radius: 8px;
|
||||
border-right: 1px solid @accent;
|
||||
}
|
||||
|
||||
.image {
|
||||
}
|
||||
|
||||
.body-image {
|
||||
margin-top: 6px;
|
||||
background-color: @foreground;
|
||||
border-radius: 8px;
|
||||
}
|
||||
|
||||
.summary {
|
||||
font-size: 16px;
|
||||
font-weight: bold;
|
||||
background: transparent;
|
||||
color: @foreground;
|
||||
text-shadow: none;
|
||||
}
|
||||
|
||||
.time {
|
||||
font-size: 16px;
|
||||
font-weight: bold;
|
||||
background: transparent;
|
||||
color: @foreground;
|
||||
text-shadow: none;
|
||||
margin-right: 18px;
|
||||
}
|
||||
|
||||
.body {
|
||||
font-size: 15px;
|
||||
font-weight: normal;
|
||||
background: transparent;
|
||||
color: @foreground;
|
||||
text-shadow: none;
|
||||
}
|
||||
|
||||
/* The "Notifications" and "Do Not Disturb" text widget */
|
||||
.top-action-title {
|
||||
color: @foreground;
|
||||
text-shadow: none;
|
||||
}
|
||||
|
||||
.control-center-clear-all {
|
||||
color: @foreground;
|
||||
text-shadow: none;
|
||||
background: @background;
|
||||
border: 2px solid @accent;
|
||||
box-shadow: none;
|
||||
border-radius: 8px;
|
||||
}
|
||||
|
||||
.control-center-clear-all:hover {
|
||||
background: @background;
|
||||
}
|
||||
|
||||
.control-center-dnd {
|
||||
border-radius: 8px;
|
||||
background: @background;
|
||||
border: 1px solid @accent;
|
||||
box-shadow: none;
|
||||
}
|
||||
|
||||
.control-center-dnd:checked {
|
||||
background: @accent;
|
||||
}
|
||||
|
||||
.control-center-dnd slider {
|
||||
background: @background;
|
||||
border-radius: 8px;
|
||||
}
|
||||
|
||||
.control-center {
|
||||
background: @background-alpha;
|
||||
border-radius: 10px;
|
||||
background-clip: border-box;
|
||||
padding: 4px;
|
||||
box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.3), 0 1px 3px 1px rgba(0, 0, 0, 0.7),
|
||||
0 2px 6px 2px rgba(0, 0, 0, 0.3);
|
||||
color: @foreground;
|
||||
border: 2px solid @accent;
|
||||
}
|
||||
|
||||
.control-center-list {
|
||||
background: transparent;
|
||||
}
|
||||
|
||||
.floating-notifications {
|
||||
background: transparent;
|
||||
}
|
||||
|
||||
/* Window behind control center and on all other monitors */
|
||||
.blank-window {
|
||||
background: transparent;
|
||||
}
|
||||
|
||||
/*** Widgets ***/
|
||||
|
||||
/* Title widget */
|
||||
.widget-title {
|
||||
margin: 8px;
|
||||
font-size: 1.5rem;
|
||||
}
|
||||
.widget-title > button {
|
||||
font-size: initial;
|
||||
color: @foreground;
|
||||
text-shadow: none;
|
||||
background: @background;
|
||||
border: 2px solid @accent;
|
||||
box-shadow: none;
|
||||
border-radius: 8px;
|
||||
}
|
||||
.widget-title > button:hover {
|
||||
background: @background;
|
||||
}
|
||||
|
||||
/* DND widget */
|
||||
.widget-dnd {
|
||||
margin: 8px;
|
||||
font-size: 1.1rem;
|
||||
}
|
||||
.widget-dnd > switch {
|
||||
font-size: initial;
|
||||
border-radius: 8px;
|
||||
background: @background;
|
||||
border: 1px solid @accent;
|
||||
box-shadow: none;
|
||||
}
|
||||
.widget-dnd > switch:checked {
|
||||
background: @accent;
|
||||
}
|
||||
.widget-dnd > switch slider {
|
||||
background: @background;
|
||||
border-radius: 8px;
|
||||
border: 1px solid @foreground;
|
||||
}
|
||||
|
||||
/* Label widget */
|
||||
.widget-label {
|
||||
margin: 8px;
|
||||
}
|
||||
.widget-label > label {
|
||||
font-size: 1.1rem;
|
||||
}
|
||||
|
||||
/* Mpris widget */
|
||||
.widget-mpris {
|
||||
/* The parent to all players */
|
||||
}
|
||||
.widget-mpris-player {
|
||||
padding: 8px;
|
||||
margin: 8px;
|
||||
background-color: @background;
|
||||
border-radius: 8px;
|
||||
border: 2px solid @accent;
|
||||
color: @foreground;
|
||||
}
|
||||
.widget-mpris-title {
|
||||
font-weight: bold;
|
||||
font-size: 1.25rem;
|
||||
}
|
||||
.widget-mpris-subtitle {
|
||||
font-size: 1.1rem;
|
||||
}
|
|
@ -1,17 +1,18 @@
|
|||
{ self, config, pkgs, hyprland, ... }:
|
||||
{ self, config, pkgs, ... }:
|
||||
{
|
||||
systemd.user.services.waybar.Service.Environment = "PATH=${pkgs.hyprland}/bin";
|
||||
systemd.user.services.waybar.Service.Environment = "PATH=${pkgs.swaynotificationcenter}/bin";
|
||||
programs.waybar = {
|
||||
enable = true;
|
||||
systemd.enable = true;
|
||||
package = hyprland.packages.x86_64-linux.waybar-hyprland;
|
||||
# package = hyprland.packages.x86_64-linux.waybar-hyprland;
|
||||
settings = {
|
||||
mainBar = {
|
||||
layer = "top";
|
||||
position = "top";
|
||||
height = 26;
|
||||
modules-left = [ "wlr/workspaces" "custom/spotifytitle" "hyprland/window" ];
|
||||
modules-right = [ "network" "cpu" "temperature" "pulseaudio" "battery" "tray" "clock" ];
|
||||
# modules-left = [ "wlr/workspaces" "custom/spotifytitle" "hyprland/window" ];
|
||||
modules-left = [ "sway/workspaces" "custom/spotifytitle" "sway/window" ];
|
||||
modules-right = [ "network" "cpu" "temperature" "pulseaudio" "battery" "tray" "custom/notification" "clock" ];
|
||||
network = {
|
||||
format-wifi = " {essid} ({signalStrength}%)";
|
||||
format-ethernet = " {ipaddr}/{cidr}";
|
||||
|
@ -20,13 +21,34 @@
|
|||
format-disconnected = "Disconnected ⚠";
|
||||
format-alt = "{ifname}: {ipaddr}/{cidr}";
|
||||
};
|
||||
"wlr/workspaces" = {
|
||||
"sway/workspaces" = {
|
||||
format = "{icon}";
|
||||
on-click = "activate";
|
||||
};
|
||||
"hyprland/window" = {
|
||||
"sway/window" = {
|
||||
format = " {}";
|
||||
separate-outputs = true;
|
||||
# separate-outputs = true;
|
||||
};
|
||||
|
||||
"custom/notification" = {
|
||||
tooltip = false;
|
||||
format = "{icon} ";
|
||||
format-icons = {
|
||||
notification = "<span foreground='red'><sup></sup></span>";
|
||||
none = "";
|
||||
dnd-notification = "<span foreground='red'><sup></sup></span>";
|
||||
dnd-none = "";
|
||||
inhibited-notification = "<span foreground='red'><sup></sup></span>";
|
||||
inhibited-none = "";
|
||||
dnd-inhibited-notification = "<span foreground='red'><sup></sup></span>";
|
||||
dnd-inhibited-none = "";
|
||||
};
|
||||
return-type = "json";
|
||||
# exec-if = "which swaync-client";
|
||||
exec = "swaync-client -swb";
|
||||
on-click = "swaync-client -t -sw";
|
||||
on-click-right = "swaync-client -d -sw";
|
||||
escape = true;
|
||||
};
|
||||
|
||||
"custom/spotifytitle" = {
|
||||
|
@ -108,6 +130,7 @@
|
|||
}
|
||||
|
||||
#custom-spotifytitle,
|
||||
#custom-notification,
|
||||
#clock,
|
||||
#battery,
|
||||
#cpu,
|
||||
|
@ -193,6 +216,7 @@
|
|||
color: #${config.colorScheme.colors.base01};
|
||||
}
|
||||
|
||||
#custom-notification,
|
||||
#tray {
|
||||
background-color: #${config.colorScheme.colors.base01};
|
||||
color: #${config.colorScheme.colors.base05};
|
Loading…
Reference in a new issue