niri
@@ -3,4 +3,6 @@
|
||||
imports = [
|
||||
];
|
||||
nixpkgs.config.allowUnfree = true;
|
||||
}
|
||||
programs.nix-index.enable = true;
|
||||
|
||||
}
|
||||
@@ -5,6 +5,7 @@
|
||||
|
||||
home.packages = with pkgs; [
|
||||
openssh
|
||||
ssh-askpass-fullscreen
|
||||
sshfs
|
||||
];
|
||||
|
||||
@@ -16,20 +17,23 @@
|
||||
|
||||
matchBlocks = {
|
||||
"*" = {
|
||||
|
||||
identityFile = [
|
||||
"~/.ssh/nixos"
|
||||
"~/.ssh/id_ed25519"
|
||||
];
|
||||
};
|
||||
|
||||
|
||||
"*.pvv.ntnu.no" = {
|
||||
user="adriangl";
|
||||
};
|
||||
|
||||
"*.ntnu.no !login.pvv.ntnu.no" = {
|
||||
user="adriangl";
|
||||
proxyJump="login.pvv.ntnu.no";
|
||||
};
|
||||
|
||||
|
||||
"snotra" = {
|
||||
user="adriangl";
|
||||
proxyJump="adriangl@login.pvv.ntnu.no";
|
||||
@@ -49,6 +53,10 @@
|
||||
"bolle.pbsds.net" = {
|
||||
user="adrlau";
|
||||
proxyJump = "login.pvv.ntnu.no";
|
||||
extraOptions = {
|
||||
StrictHostKeyChecking = "no";
|
||||
UserKnownHostsFile = "/dev/null";
|
||||
};
|
||||
};
|
||||
|
||||
#pvv
|
||||
@@ -64,30 +72,25 @@
|
||||
#home
|
||||
"aragon" = {
|
||||
port = 6969;
|
||||
user="gunalx";
|
||||
hostname="100.74.34.149";
|
||||
};
|
||||
|
||||
"galadriel" = {
|
||||
port = 6969;
|
||||
user="gunalx";
|
||||
hostname="100.84.215.84";
|
||||
};
|
||||
|
||||
"gandalf" = {
|
||||
port = 6969;
|
||||
user="gunalx";
|
||||
hostname="100.124.183.16";
|
||||
};
|
||||
|
||||
"elrond" = {
|
||||
port = 6969;
|
||||
user="gunalx";
|
||||
hostname="100.101.17.39 ";
|
||||
};
|
||||
|
||||
|
||||
|
||||
};
|
||||
|
||||
extraConfig = "";
|
||||
|
||||
@@ -1,23 +0,0 @@
|
||||
{ lib, stdenv, pkgs }:
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "wallpapers";
|
||||
version = "1.0";
|
||||
|
||||
src = pkgs.fetchurl {
|
||||
url = "file://./";
|
||||
sha256 = lib.fakeSha256;
|
||||
};
|
||||
|
||||
installPhase = ''
|
||||
mkdir -p $out/share/wallpapers
|
||||
cp -r * $out/share/wallpapers/
|
||||
'';
|
||||
|
||||
meta = with lib; {
|
||||
description = "My Collection of wallpapers";
|
||||
license = licenses.unfree;
|
||||
maintainers = with maintainers; [ adriangl ];
|
||||
};
|
||||
}
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
{
|
||||
imports = [
|
||||
../common/sshconfig.nix
|
||||
../common/unfree.nix
|
||||
../common/nix.nix
|
||||
../common/atuin.nix
|
||||
];
|
||||
|
||||
@@ -20,8 +20,8 @@
|
||||
programs.bash = {
|
||||
enable = true;
|
||||
shellAliases = {
|
||||
"rebuild" = "sudo nixos-rebuild switch --update-input nixpkgs --update-input unstable --no-write-lock-file --refresh --flake git+https://github.com/adrlau/nix-dotfiles.git --upgrade";
|
||||
"nixedit" = "vim /etc/nixos/nix-dotfiles/.";
|
||||
"rebuild" = "sudo nixos-rebuild switch -no-write-lock-file --flake git+https://github.com/adrlau/nix-dotfiles.git -L --impure";
|
||||
"nixedit" = "sudo vim /etc/nixos/nix-dotfiles/.";
|
||||
"nixdir" = "cd /etc/nixos/nix-dotfiles";
|
||||
|
||||
|
||||
|
||||
642
home/gunalx/config.kdl
Normal file
@@ -0,0 +1,642 @@
|
||||
// This config is in the KDL format: https://kdl.dev
|
||||
// "/-" comments out the following node.
|
||||
// Check the wiki for a full description of the configuration:
|
||||
// https://github.com/YaLTeR/niri/wiki/Configuration:-Overview
|
||||
|
||||
// Input device configuration.
|
||||
// Find the full list of options on the wiki:
|
||||
// https://github.com/YaLTeR/niri/wiki/Configuration:-Input
|
||||
input {
|
||||
keyboard {
|
||||
xkb {
|
||||
// You can set rules, model, layout, variant and options.
|
||||
// For more information, see xkeyboard-config(7).
|
||||
|
||||
// For example:
|
||||
layout "us,no"
|
||||
//options "grp:win_space_toggle,compose:ralt,ctrl:nocaps"
|
||||
options "grp:ctrl_space_toggle"
|
||||
}
|
||||
}
|
||||
|
||||
// Next sections include libinput settings.
|
||||
// Omitting settings disables them, or leaves them at their default values.
|
||||
touchpad {
|
||||
// off
|
||||
tap
|
||||
// dwt
|
||||
// dwtp
|
||||
// drag-lock
|
||||
natural-scroll
|
||||
accel-speed 0.1
|
||||
accel-profile "flat"
|
||||
// scroll-method "two-finger"
|
||||
// disabled-on-external-mouse
|
||||
}
|
||||
|
||||
mouse {
|
||||
// off
|
||||
// natural-scroll
|
||||
// accel-speed 0.2
|
||||
// accel-profile "flat"
|
||||
// scroll-method "no-scroll"
|
||||
}
|
||||
|
||||
trackpoint {
|
||||
// off
|
||||
// natural-scroll
|
||||
// accel-speed 0.2
|
||||
// accel-profile "flat"
|
||||
// scroll-method "on-button-down"
|
||||
// scroll-button 273
|
||||
// middle-emulation
|
||||
}
|
||||
|
||||
// Uncomment this to make the mouse warp to the center of newly focused windows.
|
||||
warp-mouse-to-focus
|
||||
|
||||
// Focus windows and outputs automatically when moving the mouse into them.
|
||||
// Setting max-scroll-amount="0%" makes it work only on windows already fully on screen.
|
||||
focus-follows-mouse max-scroll-amount="0%"
|
||||
}
|
||||
|
||||
// You can configure outputs by their name, which you can find
|
||||
// by running `niri msg outputs` while inside a niri instance.
|
||||
// The built-in laptop monitor is usually called "eDP-1".
|
||||
// Find more information on the wiki:
|
||||
// https://github.com/YaLTeR/niri/wiki/Configuration:-Outputs
|
||||
// Remember to uncomment the node by removing "/-"!
|
||||
output "AU Optronics 0x212B Unknown" {
|
||||
// Uncomment this line to disable this output.
|
||||
// off
|
||||
|
||||
// Resolution and, optionally, refresh rate of the output.
|
||||
// The format is "<width>x<height>" or "<width>x<height>@<refresh rate>".
|
||||
// If the refresh rate is omitted, niri will pick the highest refresh rate
|
||||
// for the resolution.
|
||||
// If the mode is omitted altogether or is invalid, niri will pick one automatically.
|
||||
// Run `niri msg outputs` while inside a niri instance to list all outputs and their modes.
|
||||
mode "3840x2160@60.002"
|
||||
|
||||
// You can use integer or fractional scale, for example use 1.5 for 150% scale.
|
||||
scale 2
|
||||
|
||||
// Transform allows to rotate the output counter-clockwise, valid values are:
|
||||
// normal, 90, 180, 270, flipped, flipped-90, flipped-180 and flipped-270.
|
||||
transform "normal"
|
||||
|
||||
// Position of the output in the global coordinate space.
|
||||
// This affects directional monitor actions like "focus-monitor-left", and cursor movement.
|
||||
// The cursor can only move between directly adjacent outputs.
|
||||
// Output scale and rotation has to be taken into account for positioning:
|
||||
// outputs are sized in logical, or scaled, pixels.
|
||||
// For example, a 3840×2160 output with scale 2.0 will have a logical size of 1920×1080,
|
||||
// so to put another output directly adjacent to it on the right, set its x to 1920.
|
||||
// If the position is unset or results in an overlap, the output is instead placed
|
||||
// automatically.
|
||||
position x=1920 y=2160
|
||||
}
|
||||
output "ASUSTek COMPUTER INC ASUS MB16AH L9LMTF068515" { //MAYBE move to be on the side of main monitor.
|
||||
mode "1920x1080@60.000"
|
||||
scale 1
|
||||
transform "normal"
|
||||
position x=1920 y=1080
|
||||
}
|
||||
output "Hewlett Packard HP ZR24w CNT01710L4" {
|
||||
mode "1920x1200@60.000"
|
||||
scale 1
|
||||
transform "normal"
|
||||
position x=960 y=960
|
||||
}
|
||||
output "Hewlett Packard HP ZR24w CNT0181039" {
|
||||
mode "1920x1200@60.000"
|
||||
scale 1
|
||||
transform "normal"
|
||||
position x=2880 y=960
|
||||
}
|
||||
|
||||
|
||||
|
||||
//switch events for open closing lid.
|
||||
switch-events {
|
||||
lid-close { spawn "swaylock"; }
|
||||
//lid-open { spawn "notify-send" "The laptop lid is open!"; }
|
||||
tablet-mode-on { spawn "bash" "-c" "gsettings set org.gnome.desktop.a11y.applications screen-keyboard-enabled true"; }
|
||||
tablet-mode-off { spawn "bash" "-c" "gsettings set org.gnome.desktop.a11y.applications screen-keyboard-enabled false"; }
|
||||
}
|
||||
|
||||
|
||||
// Settings that influence how windows are positioned and sized.
|
||||
// Find more information on the wiki:
|
||||
// https://github.com/YaLTeR/niri/wiki/Configuration:-Layout
|
||||
layout {
|
||||
// Set gaps around windows in logical pixels.
|
||||
gaps 8
|
||||
|
||||
// When to center a column when changing focus, options are:
|
||||
// - "never", default behavior, focusing an off-screen column will keep at the left
|
||||
// or right edge of the screen.
|
||||
// - "always", the focused column will always be centered.
|
||||
// - "on-overflow", focusing a column will center it if it doesn't fit
|
||||
// together with the previously focused column.
|
||||
center-focused-column "on-overflow"
|
||||
|
||||
// You can customize the widths that "switch-preset-column-width" (Mod+R) toggles between.
|
||||
preset-column-widths {
|
||||
// Proportion sets the width as a fraction of the output width, taking gaps into account.
|
||||
// For example, you can perfectly fit four windows sized "proportion 0.25" on an output.
|
||||
// The default preset widths are 1/3, 1/2 and 2/3 of the output but that is annoying.
|
||||
proportion 0.3333333
|
||||
proportion 0.5
|
||||
proportion 0.6666667
|
||||
proportion 0.9
|
||||
|
||||
// Fixed sets the width in logical pixels exactly.
|
||||
// fixed 1920
|
||||
}
|
||||
|
||||
// You can also customize the heights that "switch-preset-window-height" (Mod+Shift+R) toggles between.
|
||||
// preset-window-heights { }
|
||||
|
||||
// You can change the default width of the new windows.
|
||||
default-column-width { proportion 0.5; }
|
||||
// If you leave the brackets empty, the windows themselves will decide their initial width.
|
||||
// default-column-width {}
|
||||
|
||||
// By default focus ring and border are rendered as a solid background rectangle
|
||||
// behind windows. That is, they will show up through semitransparent windows.
|
||||
// This is because windows using client-side decorations can have an arbitrary shape.
|
||||
// If you don't like that, you should uncomment `prefer-no-csd` below.
|
||||
// Niri will draw focus ring and border *around* windows that agree to omit their
|
||||
// client-side decorations.
|
||||
// Alternatively, you can override it with a window rule called
|
||||
// `draw-border-with-background`.
|
||||
|
||||
// You can change how the focus ring looks.
|
||||
focus-ring {
|
||||
// Uncomment this line to disable the focus ring.
|
||||
// off
|
||||
|
||||
// How many logical pixels the ring extends out from the windows.
|
||||
width 2
|
||||
|
||||
// Colors can be set in a variety of ways:
|
||||
// - CSS named colors: "red"
|
||||
// - RGB hex: "#rgb", "#rgba", "#rrggbb", "#rrggbbaa"
|
||||
// - CSS-like notation: "rgb(255, 127, 0)", rgba(), hsl() and a few others.
|
||||
|
||||
// Color of the ring on the active monitor.
|
||||
active-color "#7fffc8"
|
||||
|
||||
// Color of the ring on inactive monitors.
|
||||
inactive-color "#505050"
|
||||
|
||||
// You can also use gradients. They take precedence over solid colors.
|
||||
// Gradients are rendered the same as CSS linear-gradient(angle, from, to).
|
||||
// The angle is the same as in linear-gradient, and is optional,
|
||||
// defaulting to 180 (top-to-bottom gradient).
|
||||
// You can use any CSS linear-gradient tool on the web to set these up.
|
||||
// Changing the color space is also supported, check the wiki for more info.
|
||||
//
|
||||
// active-gradient from="#80c8ff" to="#bbddff" angle=45
|
||||
|
||||
// You can also color the gradient relative to the entire view
|
||||
// of the workspace, rather than relative to just the window itself.
|
||||
// To do that, set relative-to="workspace-view".
|
||||
//
|
||||
// inactive-gradient from="#505050" to="#808080" angle=45 relative-to="workspace-view"
|
||||
}
|
||||
|
||||
// You can also add a border. It's similar to the focus ring, but always visible.
|
||||
border {
|
||||
// The settings are the same as for the focus ring.
|
||||
// If you enable the border, you probably want to disable the focus ring.
|
||||
off
|
||||
width 2
|
||||
active-color "#ffc87f"
|
||||
inactive-color "#505050"
|
||||
// active-gradient from="#ffbb66" to="#ffc880" angle=45 relative-to="workspace-view"
|
||||
// inactive-gradient from="#505050" to="#808080" angle=45 relative-to="workspace-view"
|
||||
}
|
||||
|
||||
// You can enable drop shadows for windows.
|
||||
shadow {
|
||||
// Uncomment the next line to enable shadows.
|
||||
on
|
||||
|
||||
// By default, the shadow draws only around its window, and not behind it.
|
||||
// Uncomment this setting to make the shadow draw behind its window.
|
||||
//
|
||||
// Note that niri has no way of knowing about the CSD window corner
|
||||
// radius. It has to assume that windows have square corners, leading to
|
||||
// shadow artifacts inside the CSD rounded corners. This setting fixes
|
||||
// those artifacts.
|
||||
//
|
||||
// However, instead you may want to set prefer-no-csd and/or
|
||||
// geometry-corner-radius. Then, niri will know the corner radius and
|
||||
// draw the shadow correctly, without having to draw it behind the
|
||||
// window. These will also remove client-side shadows if the window
|
||||
// draws any.
|
||||
//
|
||||
//draw-behind-window false
|
||||
|
||||
// You can change how shadows look. The values below are in logical
|
||||
// pixels and match the CSS box-shadow properties.
|
||||
|
||||
// Softness controls the shadow blur radius.
|
||||
softness 30
|
||||
|
||||
// Spread expands the shadow.
|
||||
spread 5
|
||||
|
||||
// Offset moves the shadow relative to the window.
|
||||
offset x=0 y=5
|
||||
|
||||
// You can also change the shadow color and opacity.
|
||||
color "#0007"
|
||||
}
|
||||
|
||||
// Struts shrink the area occupied by windows, similarly to layer-shell panels.
|
||||
// You can think of them as a kind of outer gaps. They are set in logical pixels.
|
||||
// Left and right struts will cause the next window to the side to always be visible.
|
||||
// Top and bottom struts will simply add outer gaps in addition to the area occupied by
|
||||
// layer-shell panels and regular gaps.
|
||||
struts {
|
||||
left 24
|
||||
right 24
|
||||
// top 64
|
||||
// bottom 64
|
||||
}
|
||||
}
|
||||
|
||||
// Add lines like this to spawn processes at startup.
|
||||
// Note that running niri as a session supports xdg-desktop-autostart,
|
||||
// which may be more convenient to use.
|
||||
// See the binds section below for more spawn examples.
|
||||
// spawn-at-startup "alacritty" "-e" "fish"
|
||||
spawn-at-startup "foot" "--server"
|
||||
spawn-at-startup "xwayland-satellite"
|
||||
spawn-at-startup "mako"
|
||||
spawn-at-startup "swww-daemon"
|
||||
spawn-at-startup "waybar"
|
||||
spawn-at-startup "swayidle" "-w" "timeout" "601" "niri msg action power-off-monitors" "timeout" "600" "swaylock -f" "before-sleep" "swaylock -f"
|
||||
|
||||
// Uncomment this line to ask the clients to omit their client-side decorations if possible.
|
||||
// If the client will specifically ask for CSD, the request will be honored.
|
||||
// Additionally, clients will be informed that they are tiled, removing some client-side rounded corners.
|
||||
// This option will also fix border/focus ring drawing behind some semitransparent windows.
|
||||
// After enabling or disabling this, you need to restart the apps for this to take effect.
|
||||
prefer-no-csd
|
||||
|
||||
// You can change the path where screenshots are saved.
|
||||
// A ~ at the front will be expanded to the home directory.
|
||||
// The path is formatted with strftime(3) to give you the screenshot date and time.
|
||||
screenshot-path "~/Pictures/screenshots/screenshot-%Y-%m-%d %H-%M-%S.png"
|
||||
|
||||
// You can also set this to null to disable saving screenshots to disk.
|
||||
// screenshot-path null
|
||||
|
||||
// Animation settings.
|
||||
// The wiki explains how to configure individual animations:
|
||||
// https://github.com/YaLTeR/niri/wiki/Configuration:-Animations
|
||||
animations {
|
||||
// Uncomment to turn off all animations.
|
||||
off
|
||||
|
||||
// Slow down all animations by this factor. Values below 1 speed them up instead.
|
||||
// slowdown 3.0
|
||||
}
|
||||
|
||||
// Window rules let you adjust behavior for individual windows.
|
||||
// Find more information on the wiki:
|
||||
// https://github.com/YaLTeR/niri/wiki/Configuration:-Window-Rules
|
||||
|
||||
// Work around WezTerm's initial configure bug
|
||||
// by setting an empty default-column-width.
|
||||
window-rule {
|
||||
// This regular expression is intentionally made as specific as possible,
|
||||
// since this is the default config, and we want no false positives.
|
||||
// You can get away with just app-id="wezterm" if you want.
|
||||
match app-id=r#"^org\.wezfurlong\.wezterm$"#
|
||||
default-column-width {}
|
||||
}
|
||||
|
||||
// Open the Firefox picture-in-picture player as floating by default.
|
||||
window-rule {
|
||||
// This app-id regular expression will work for both:
|
||||
// - host Firefox (app-id is "firefox")
|
||||
// - Flatpak Firefox (app-id is "org.mozilla.firefox")
|
||||
match app-id=r#"firefox$"# title="^Picture-in-Picture$"
|
||||
match app-id=r#"firefox$"# title="^Bitwarden$"
|
||||
match app-id=r#"firefox$"# title="^Extension: (Bitwarden Password Manager) - Bitwarden — Mozilla Firefox$"
|
||||
match app-id=r#"Bitwarden$"#
|
||||
open-floating true
|
||||
}
|
||||
|
||||
//niri overview python script.
|
||||
window-rule {
|
||||
match app-id=r#"niri-overview.py"#
|
||||
match app-id=r#"niri_overview.py"#
|
||||
match app-id=r#"niri_overview.bin"#
|
||||
match app-id=r#"niri_overview"#
|
||||
open-focused true
|
||||
open-floating true
|
||||
default-window-height { proportion 0.5; }
|
||||
default-column-width { proportion 0.8; }
|
||||
}
|
||||
|
||||
//fix steam notifications to bottom rigth
|
||||
window-rule {
|
||||
match app-id="steam" title=r#"^notificationtoasts_\d+_desktop$"#
|
||||
default-floating-position x=10 y=10 relative-to="bottom-right"
|
||||
}
|
||||
|
||||
|
||||
// Example: block out two password managers from screen capture.
|
||||
// (This example rule is commented out with a "/-" in front.)
|
||||
/-window-rule {
|
||||
match app-id=r#"^org\.keepassxc\.KeePassXC$"#
|
||||
match app-id=r#"^org\.gnome\.World\.Secrets$"#
|
||||
match app-id=r#"^Bitwarden$"#
|
||||
|
||||
block-out-from "screen-capture"
|
||||
|
||||
// Use this instead if you want them visible on third-party screenshot tools.
|
||||
// block-out-from "screencast"
|
||||
}
|
||||
|
||||
// Example: enable rounded corners for all windows.
|
||||
// (This example rule is commented out with a "/-" in front.)
|
||||
/-window-rule {
|
||||
geometry-corner-radius 12
|
||||
clip-to-geometry true
|
||||
}
|
||||
|
||||
window-rule {
|
||||
geometry-corner-radius 12
|
||||
clip-to-geometry true
|
||||
}
|
||||
|
||||
binds {
|
||||
// Keys consist of modifiers separated by + signs, followed by an XKB key name
|
||||
// in the end. To find an XKB name for a particular key, you may use a program
|
||||
// like wev.
|
||||
//
|
||||
// "Mod" is a special modifier equal to Super when running on a TTY, and to Alt
|
||||
// when running as a winit window.
|
||||
//
|
||||
// Most actions that you can bind here can also be invoked programmatically with
|
||||
// `niri msg action do-something`.
|
||||
|
||||
// Mod-Shift-/, which is usually the same as Mod-?,
|
||||
// shows a list of important hotkeys.
|
||||
Mod+Shift+Slash { show-hotkey-overlay; }
|
||||
|
||||
// spawn niri overview script
|
||||
Mod+Slash { spawn "/home/gunalx/.config/niri/niri_overview/niri_overview.bin"; }
|
||||
// for next release
|
||||
// Mod+Slash { toggle-overview; }
|
||||
|
||||
// Suggested binds for running programs: terminal, app launcher, screen locker.
|
||||
Mod+Return { spawn "foot"; }
|
||||
Mod+D { spawn "fuzzel"; }
|
||||
Super+M { spawn "swaylock"; }
|
||||
|
||||
// You can also use a shell. Do this if you need pipes, multiple commands, etc.
|
||||
// Note: the entire command goes as a single argument in the end.
|
||||
// Mod+T { spawn "bash" "-c" "notify-send hello && exec alacritty"; }
|
||||
|
||||
// Example volume keys mappings for PipeWire & WirePlumber.
|
||||
// The allow-when-locked=true property makes them work even when the session is locked.
|
||||
XF86AudioRaiseVolume allow-when-locked=true { spawn "wpctl" "set-volume" "@DEFAULT_AUDIO_SINK@" "0.1+"; }
|
||||
XF86AudioLowerVolume allow-when-locked=true { spawn "wpctl" "set-volume" "@DEFAULT_AUDIO_SINK@" "0.1-"; }
|
||||
XF86AudioMute allow-when-locked=true { spawn "wpctl" "set-mute" "@DEFAULT_AUDIO_SINK@" "toggle"; }
|
||||
XF86AudioMicMute allow-when-locked=true { spawn "wpctl" "set-mute" "@DEFAULT_AUDIO_SOURCE@" "toggle"; }
|
||||
|
||||
Mod+Shift+Q { close-window; }
|
||||
|
||||
Mod+Left { focus-column-left; }
|
||||
Mod+Down { focus-window-down; }
|
||||
Mod+Up { focus-window-up; }
|
||||
Mod+Right { focus-column-right; }
|
||||
Mod+H { focus-column-left; }
|
||||
Mod+J { focus-window-down; }
|
||||
Mod+K { focus-window-up; }
|
||||
Mod+L { focus-column-right; }
|
||||
|
||||
Alt+Tab { focus-window-previous; }
|
||||
|
||||
Mod+Ctrl+Left { move-column-left; }
|
||||
Mod+Ctrl+Down { move-window-down; }
|
||||
Mod+Ctrl+Up { move-window-up; }
|
||||
Mod+Ctrl+Right { move-column-right; }
|
||||
Mod+Ctrl+H { move-column-left; }
|
||||
Mod+Ctrl+J { move-window-down; }
|
||||
Mod+Ctrl+K { move-window-up; }
|
||||
Mod+Ctrl+L { move-column-right; }
|
||||
|
||||
// Alternative commands that move across workspaces when reaching
|
||||
// the first or last window in a column.
|
||||
// Mod+J { focus-window-or-workspace-down; }
|
||||
// Mod+K { focus-window-or-workspace-up; }
|
||||
// Mod+Ctrl+J { move-window-down-or-to-workspace-down; }
|
||||
// Mod+Ctrl+K { move-window-up-or-to-workspace-up; }
|
||||
|
||||
Mod+Home { focus-column-first; }
|
||||
Mod+End { focus-column-last; }
|
||||
Mod+Ctrl+Home { move-column-to-first; }
|
||||
Mod+Ctrl+End { move-column-to-last; }
|
||||
|
||||
Mod+Shift+Left { focus-monitor-left; }
|
||||
Mod+Shift+Down { focus-monitor-down; }
|
||||
Mod+Shift+Up { focus-monitor-up; }
|
||||
Mod+Shift+Right { focus-monitor-right; }
|
||||
Mod+Shift+H { focus-monitor-left; }
|
||||
Mod+Shift+J { focus-monitor-down; }
|
||||
Mod+Shift+K { focus-monitor-up; }
|
||||
Mod+Shift+L { focus-monitor-right; }
|
||||
|
||||
Mod+Shift+Ctrl+Left { move-column-to-monitor-left; }
|
||||
Mod+Shift+Ctrl+Down { move-column-to-monitor-down; }
|
||||
Mod+Shift+Ctrl+Up { move-column-to-monitor-up; }
|
||||
Mod+Shift+Ctrl+Right { move-column-to-monitor-right; }
|
||||
Mod+Shift+Ctrl+H { move-column-to-monitor-left; }
|
||||
Mod+Shift+Ctrl+J { move-column-to-monitor-down; }
|
||||
Mod+Shift+Ctrl+K { move-column-to-monitor-up; }
|
||||
Mod+Shift+Ctrl+L { move-column-to-monitor-right; }
|
||||
|
||||
// Alternatively, there are commands to move just a single window:
|
||||
// Mod+Shift+Ctrl+Left { move-window-to-monitor-left; }
|
||||
// ...
|
||||
|
||||
// And you can also move a whole workspace to another monitor:
|
||||
// Mod+Shift+Ctrl+Left { move-workspace-to-monitor-left; }
|
||||
// ...
|
||||
|
||||
Mod+Page_Down { focus-workspace-down; }
|
||||
Mod+Page_Up { focus-workspace-up; }
|
||||
Mod+U { focus-workspace-down; }
|
||||
Mod+I { focus-workspace-up; }
|
||||
Mod+Ctrl+Page_Down { move-column-to-workspace-down; }
|
||||
Mod+Ctrl+Page_Up { move-column-to-workspace-up; }
|
||||
Mod+Ctrl+U { move-column-to-workspace-down; }
|
||||
Mod+Ctrl+I { move-column-to-workspace-up; }
|
||||
|
||||
// Alternatively, there are commands to move just a single window:
|
||||
// Mod+Ctrl+Page_Down { move-window-to-workspace-down; }
|
||||
// ...
|
||||
|
||||
Mod+Shift+Page_Down { move-workspace-down; }
|
||||
Mod+Shift+Page_Up { move-workspace-up; }
|
||||
Mod+Shift+U { move-workspace-down; }
|
||||
Mod+Shift+I { move-workspace-up; }
|
||||
|
||||
// You can bind mouse wheel scroll ticks using the following syntax.
|
||||
// These binds will change direction based on the natural-scroll setting.
|
||||
//
|
||||
// To avoid scrolling through workspaces really fast, you can use
|
||||
// the cooldown-ms property. The bind will be rate-limited to this value.
|
||||
// You can set a cooldown on any bind, but it's most useful for the wheel.
|
||||
Mod+WheelScrollDown cooldown-ms=150 { focus-workspace-down; }
|
||||
Mod+WheelScrollUp cooldown-ms=150 { focus-workspace-up; }
|
||||
Mod+Ctrl+WheelScrollDown cooldown-ms=150 { move-column-to-workspace-down; }
|
||||
Mod+Ctrl+WheelScrollUp cooldown-ms=150 { move-column-to-workspace-up; }
|
||||
|
||||
Mod+WheelScrollRight { focus-column-right; }
|
||||
Mod+WheelScrollLeft { focus-column-left; }
|
||||
Mod+Ctrl+WheelScrollRight { move-column-right; }
|
||||
Mod+Ctrl+WheelScrollLeft { move-column-left; }
|
||||
|
||||
// Usually scrolling up and down with Shift in applications results in
|
||||
// horizontal scrolling; these binds replicate that.
|
||||
Mod+Shift+WheelScrollDown { focus-column-right; }
|
||||
Mod+Shift+WheelScrollUp { focus-column-left; }
|
||||
Mod+Ctrl+Shift+WheelScrollDown { move-column-right; }
|
||||
Mod+Ctrl+Shift+WheelScrollUp { move-column-left; }
|
||||
|
||||
// Similarly, you can bind touchpad scroll "ticks".
|
||||
// Touchpad scrolling is continuous, so for these binds it is split into
|
||||
// discrete intervals.
|
||||
// These binds are also affected by touchpad's natural-scroll, so these
|
||||
// example binds are "inverted", since we have natural-scroll enabled for
|
||||
// touchpads by default.
|
||||
// Mod+TouchpadScrollDown { spawn "wpctl" "set-volume" "@DEFAULT_AUDIO_SINK@" "0.02+"; }
|
||||
// Mod+TouchpadScrollUp { spawn "wpctl" "set-volume" "@DEFAULT_AUDIO_SINK@" "0.02-"; }
|
||||
|
||||
// You can refer to workspaces by index. However, keep in mind that
|
||||
// niri is a dynamic workspace system, so these commands are kind of
|
||||
// "best effort". Trying to refer to a workspace index bigger than
|
||||
// the current workspace count will instead refer to the bottommost
|
||||
// (empty) workspace.
|
||||
//
|
||||
// For example, with 2 workspaces + 1 empty, indices 3, 4, 5 and so on
|
||||
// will all refer to the 3rd workspace.
|
||||
Mod+1 { focus-workspace 1; }
|
||||
Mod+2 { focus-workspace 2; }
|
||||
Mod+3 { focus-workspace 3; }
|
||||
Mod+4 { focus-workspace 4; }
|
||||
Mod+5 { focus-workspace 5; }
|
||||
Mod+6 { focus-workspace 6; }
|
||||
Mod+7 { focus-workspace 7; }
|
||||
Mod+8 { focus-workspace 8; }
|
||||
Mod+9 { focus-workspace 9; }
|
||||
Mod+Ctrl+1 { move-column-to-workspace 1; }
|
||||
Mod+Ctrl+2 { move-column-to-workspace 2; }
|
||||
Mod+Ctrl+3 { move-column-to-workspace 3; }
|
||||
Mod+Ctrl+4 { move-column-to-workspace 4; }
|
||||
Mod+Ctrl+5 { move-column-to-workspace 5; }
|
||||
Mod+Ctrl+6 { move-column-to-workspace 6; }
|
||||
Mod+Ctrl+7 { move-column-to-workspace 7; }
|
||||
Mod+Ctrl+8 { move-column-to-workspace 8; }
|
||||
Mod+Ctrl+9 { move-column-to-workspace 9; }
|
||||
|
||||
// Alternatively, there are commands to move just a single window:
|
||||
// Mod+Ctrl+1 { move-window-to-workspace 1; }
|
||||
|
||||
// Switches focus between the current and the previous workspace.
|
||||
// Mod+Tab { focus-workspace-previous; }
|
||||
|
||||
// The following binds move the focused window in and out of a column.
|
||||
// If the window is alone, they will consume it into the nearby column to the side.
|
||||
// If the window is already in a column, they will expel it out.
|
||||
Mod+BracketLeft { consume-or-expel-window-left; }
|
||||
Mod+BracketRight { consume-or-expel-window-right; }
|
||||
|
||||
// Consume one window from the right to the bottom of the focused column.
|
||||
Mod+Comma { consume-window-into-column; }
|
||||
// Expel the bottom window from the focused column to the right.
|
||||
Mod+Period { expel-window-from-column; }
|
||||
|
||||
Mod+R { switch-preset-column-width; }
|
||||
Mod+Shift+R { switch-preset-window-height; }
|
||||
Mod+Ctrl+R { reset-window-height; }
|
||||
Mod+F { maximize-column; }
|
||||
Mod+Shift+F { fullscreen-window; }
|
||||
|
||||
// Expand the focused column to space not taken up by other fully visible columns.
|
||||
// Makes the column "fill the rest of the space".
|
||||
Mod+Ctrl+F { expand-column-to-available-width; }
|
||||
|
||||
Mod+C { center-column; }
|
||||
|
||||
// Finer width adjustments.
|
||||
// This command can also:
|
||||
// * set width in pixels: "1000"
|
||||
// * adjust width in pixels: "-5" or "+5"
|
||||
// * set width as a percentage of screen width: "25%"
|
||||
// * adjust width as a percentage of screen width: "-10%" or "+10%"
|
||||
// Pixel sizes use logical, or scaled, pixels. I.e. on an output with scale 2.0,
|
||||
// set-column-width "100" will make the column occupy 200 physical screen pixels.
|
||||
Mod+Minus { set-column-width "-10%"; }
|
||||
Mod+Equal { set-column-width "+10%"; }
|
||||
|
||||
// Finer height adjustments when in column with other windows.
|
||||
Mod+Shift+Minus { set-window-height "-10%"; }
|
||||
Mod+Shift+Equal { set-window-height "+10%"; }
|
||||
|
||||
// Move the focused window between the floating and the tiling layout.
|
||||
Mod+V { toggle-window-floating; }
|
||||
Mod+Shift+V { switch-focus-between-floating-and-tiling; }
|
||||
|
||||
// Toggle tabbed column display mode.
|
||||
// Windows in this column will appear as vertical tabs,
|
||||
// rather than stacked on top of each other.
|
||||
Mod+W { toggle-column-tabbed-display; }
|
||||
|
||||
// Actions to switch layouts.
|
||||
// Note: if you uncomment these, make sure you do NOT have
|
||||
// a matching layout switch hotkey configured in xkb options above.
|
||||
// Having both at once on the same hotkey will break the switching,
|
||||
// since it will switch twice upon pressing the hotkey (once by xkb, once by niri).
|
||||
// Mod+Space { switch-layout "next"; }
|
||||
// Mod+Shift+Space { switch-layout "prev"; }
|
||||
|
||||
Print { screenshot; }
|
||||
Ctrl+Print { screenshot-screen; }
|
||||
Alt+Print { screenshot-window; }
|
||||
|
||||
// Applications such as remote-desktop clients and software KVM switches may
|
||||
// request that niri stops processing the keyboard shortcuts defined here
|
||||
// so they may, for example, forward the key presses as-is to a remote machine.
|
||||
// It's a good idea to bind an escape hatch to toggle the inhibitor,
|
||||
// so a buggy application can't hold your session hostage.
|
||||
//
|
||||
// The allow-inhibiting=false property can be applied to other binds as well,
|
||||
// which ensures niri always processes them, even when an inhibitor is active.
|
||||
Mod+Escape allow-inhibiting=false { toggle-keyboard-shortcuts-inhibit; }
|
||||
|
||||
// The quit action will show a confirmation dialog to avoid accidental exits.
|
||||
Mod+Shift+E { quit; }
|
||||
Ctrl+Alt+Delete { quit; }
|
||||
|
||||
// Powers off the monitors. To turn them back on, do any input like
|
||||
// moving the mouse or pressing any other key.
|
||||
Mod+Shift+P { power-off-monitors; }
|
||||
}
|
||||
|
||||
|
||||
//Enviroment to be set.
|
||||
environment {
|
||||
DISPLAY ":0"
|
||||
ELECTRON_OZONE_PLATFORM_HINT "auto"
|
||||
}
|
||||
@@ -4,6 +4,7 @@
|
||||
./base.nix
|
||||
./code.nix
|
||||
./sway.nix
|
||||
./niri.nix
|
||||
./colors.nix
|
||||
|
||||
#./stylix.nix
|
||||
|
||||
69
home/gunalx/mako.nix
Normal file
@@ -0,0 +1,69 @@
|
||||
{ config, pkgs, ... }:
|
||||
|
||||
let
|
||||
palette = config.colorscheme.palette;
|
||||
in {
|
||||
services.mako = {
|
||||
enable = true; # Turn on mako
|
||||
package = pkgs.mako; # Which package to use
|
||||
|
||||
# Colors (from your colorscheme)
|
||||
backgroundColor = "${palette.base00}FF"; # popup background
|
||||
textColor = "${palette.base05}FF"; # popup text
|
||||
borderColor = "${palette.base03}FF"; # popup border
|
||||
progressColor = "over ${palette.base0A}FF"; # progress bar
|
||||
|
||||
# Placement & layering
|
||||
anchor = "top-right"; # corner on screen
|
||||
layer = "overlay"; # appear above fullscreen
|
||||
|
||||
# Geometry
|
||||
width = 320; # px
|
||||
height = 120; # max px
|
||||
margin = "10"; # all edges
|
||||
padding = "8"; # all edges
|
||||
borderSize = 2; # px
|
||||
borderRadius = 12; # px
|
||||
|
||||
# Font & icons
|
||||
font = "monospace 10"; # Pango font
|
||||
icons = true; # show icons
|
||||
iconPath = "/usr/share/icons:/usr/share/pixmaps";
|
||||
maxIconSize = 48; # px
|
||||
|
||||
# Behavior & timing
|
||||
defaultTimeout = 5000; # ms; 0 = no timeout
|
||||
ignoreTimeout = true; # use defaultTimeout always
|
||||
actions = true; # clickable actions
|
||||
maxVisible = 5; # simultaneous popups
|
||||
sort = "-time"; # newest first
|
||||
groupBy = "app-name"; # grouping criteria
|
||||
markup = true; # enable Pango markup
|
||||
|
||||
extraConfig = ''
|
||||
# Urgency-specific colors
|
||||
[urgency=critical]
|
||||
background-color = ${palette.base08}FF
|
||||
border-color = ${palette.base00}FF
|
||||
text-color = ${palette.base01}FF
|
||||
|
||||
# Grouping settings
|
||||
[grouped]
|
||||
invisible = 1
|
||||
on-button-right = dismiss-group
|
||||
|
||||
[group-index=0]
|
||||
invisible = 0
|
||||
on-button-right = dismiss-group
|
||||
|
||||
# Modes
|
||||
[mode=away]
|
||||
default-timeout = 0
|
||||
ignore-timeout = 1
|
||||
|
||||
[mode=do-not-disturb]
|
||||
invisible = 1
|
||||
on-notify = none
|
||||
'';
|
||||
};
|
||||
}
|
||||
661
home/gunalx/niri.nix
Normal file
@@ -0,0 +1,661 @@
|
||||
{ pkgs, config, lib, ... }:
|
||||
let
|
||||
palette = config.colorScheme.palette;
|
||||
|
||||
niriConfig = ''
|
||||
// KDL‐format niri config
|
||||
|
||||
input {
|
||||
keyboard { xkb { layout "us,no"; options "grp:ctrl_space_toggle"; }; }
|
||||
touchpad {
|
||||
tap
|
||||
natural-scroll
|
||||
accel-speed 0.1
|
||||
accel-profile "flat"
|
||||
}
|
||||
warp-mouse-to-focus
|
||||
focus-follows-mouse max-scroll-amount="0%"
|
||||
}
|
||||
|
||||
output "AU Optronics 0x212B Unknown" {
|
||||
mode "3840x2160@60.002"
|
||||
//focus-at-startup
|
||||
scale 2
|
||||
transform "normal"
|
||||
position x=1920 y=2160
|
||||
}
|
||||
output "ASUSTek COMPUTER INC ASUS MB16AH L9LMTF068515" {
|
||||
mode "1920x1080@60.000"
|
||||
scale 1
|
||||
transform "normal"
|
||||
position x=1920 y=1080
|
||||
}
|
||||
output "Hewlett Packard HP ZR24w CNT01710L4" {
|
||||
mode "1920x1200@60.000"
|
||||
scale 1
|
||||
transform "normal"
|
||||
position x=960 y=960
|
||||
}
|
||||
output "Hewlett Packard HP ZR24w CNT0181039" {
|
||||
mode "1920x1200@60.000"
|
||||
scale 1
|
||||
transform "normal"
|
||||
position x=2880 y=960
|
||||
}
|
||||
|
||||
//desktop outputs.
|
||||
output "Dell Inc. DELL U2410 F525M06G123L" {
|
||||
mode "2560x1440@144.000"
|
||||
scale 1
|
||||
transform "90"
|
||||
position x=0 y=0
|
||||
}
|
||||
output "Samsung Electric Company LC27G5xT H4LR800468" {
|
||||
mode "1920x1200@59.950"
|
||||
variable-refresh-rate on-demand=true
|
||||
//focus-at-startup
|
||||
scale 1
|
||||
transform "normal"
|
||||
position x=1200 y=240
|
||||
}
|
||||
|
||||
//switch events for open closing lid.
|
||||
switch-events {
|
||||
lid-close { spawn "swaylock"; }
|
||||
//lid-open { spawn "notify-send" "The laptop lid is open!"; }
|
||||
tablet-mode-on { spawn "bash" "-c" "gsettings set org.gnome.desktop.a11y.applications screen-keyboard-enabled true"; }
|
||||
tablet-mode-off { spawn "bash" "-c" "gsettings set org.gnome.desktop.a11y.applications screen-keyboard-enabled false"; }
|
||||
}
|
||||
|
||||
|
||||
// Settings that influence how windows are positioned and sized.
|
||||
// Find more information on the wiki:
|
||||
// https://github.com/YaLTeR/niri/wiki/Configuration:-Layout
|
||||
layout {
|
||||
// Set gaps around windows in logical pixels.
|
||||
gaps 8
|
||||
|
||||
// When to center a column when changing focus, options are:
|
||||
// - "never", default behavior, focusing an off-screen column will keep at the left
|
||||
// or right edge of the screen.
|
||||
// - "always", the focused column will always be centered.
|
||||
// - "on-overflow", focusing a column will center it if it doesn't fit
|
||||
// together with the previously focused column.
|
||||
center-focused-column "on-overflow"
|
||||
|
||||
// You can customize the widths that "switch-preset-column-width" (Mod+R) toggles between.
|
||||
preset-column-widths {
|
||||
// Proportion sets the width as a fraction of the output width, taking gaps into account.
|
||||
// For example, you can perfectly fit four windows sized "proportion 0.25" on an output.
|
||||
// The default preset widths are 1/3, 1/2 and 2/3 of the output but that is annoying.
|
||||
proportion 0.3333333
|
||||
proportion 0.5
|
||||
proportion 0.6666667
|
||||
proportion 0.9
|
||||
|
||||
// Fixed sets the width in logical pixels exactly.
|
||||
// fixed 1920
|
||||
}
|
||||
|
||||
// You can also customize the heights that "switch-preset-window-height" (Mod+Shift+R) toggles between.
|
||||
// preset-window-heights { }
|
||||
|
||||
// You can change the default width of the new windows.
|
||||
default-column-width { proportion 0.5; }
|
||||
// If you leave the brackets empty, the windows themselves will decide their initial width.
|
||||
// default-column-width {}
|
||||
|
||||
// By default focus ring and border are rendered as a solid background rectangle
|
||||
// behind windows. That is, they will show up through semitransparent windows.
|
||||
// This is because windows using client-side decorations can have an arbitrary shape.
|
||||
// If you don't like that, you should uncomment `prefer-no-csd` below.
|
||||
// Niri will draw focus ring and border *around* windows that agree to omit their
|
||||
// client-side decorations.
|
||||
// Alternatively, you can override it with a window rule called
|
||||
// `draw-border-with-background`.
|
||||
|
||||
// You can change how the focus ring looks.
|
||||
focus-ring {
|
||||
// Uncomment this line to disable the focus ring.
|
||||
// off
|
||||
|
||||
// How many logical pixels the ring extends out from the windows.
|
||||
width 2
|
||||
|
||||
// Colors can be set in a variety of ways:
|
||||
// - CSS named colors: "red"
|
||||
// - RGB hex: "#rgb", "#rgba", "#rrggbb", "#rrggbbaa"
|
||||
// - CSS-like notation: "rgb(255, 127, 0)", rgba(), hsl() and a few others.
|
||||
|
||||
// Color of the ring on the active monitor.
|
||||
active-color "#7fffc8"
|
||||
|
||||
// Color of the ring on inactive monitors.
|
||||
inactive-color "#505050"
|
||||
|
||||
// You can also use gradients. They take precedence over solid colors.
|
||||
// Gradients are rendered the same as CSS linear-gradient(angle, from, to).
|
||||
// The angle is the same as in linear-gradient, and is optional,
|
||||
// defaulting to 180 (top-to-bottom gradient).
|
||||
// You can use any CSS linear-gradient tool on the web to set these up.
|
||||
// Changing the color space is also supported, check the wiki for more info.
|
||||
//
|
||||
// active-gradient from="#80c8ff" to="#bbddff" angle=45
|
||||
|
||||
// You can also color the gradient relative to the entire view
|
||||
// of the workspace, rather than relative to just the window itself.
|
||||
// To do that, set relative-to="workspace-view".
|
||||
//
|
||||
// inactive-gradient from="#505050" to="#808080" angle=45 relative-to="workspace-view"
|
||||
}
|
||||
|
||||
// You can also add a border. It's similar to the focus ring, but always visible.
|
||||
border {
|
||||
// The settings are the same as for the focus ring.
|
||||
// If you enable the border, you probably want to disable the focus ring.
|
||||
off
|
||||
width 2
|
||||
active-color "#ffc87f"
|
||||
inactive-color "#505050"
|
||||
// active-gradient from="#ffbb66" to="#ffc880" angle=45 relative-to="workspace-view"
|
||||
// inactive-gradient from="#505050" to="#808080" angle=45 relative-to="workspace-view"
|
||||
}
|
||||
|
||||
// You can enable drop shadows for windows.
|
||||
shadow {
|
||||
// Uncomment the next line to enable shadows.
|
||||
on
|
||||
|
||||
// By default, the shadow draws only around its window, and not behind it.
|
||||
// Uncomment this setting to make the shadow draw behind its window.
|
||||
//
|
||||
// Note that niri has no way of knowing about the CSD window corner
|
||||
// radius. It has to assume that windows have square corners, leading to
|
||||
// shadow artifacts inside the CSD rounded corners. This setting fixes
|
||||
// those artifacts.
|
||||
//
|
||||
// However, instead you may want to set prefer-no-csd and/or
|
||||
// geometry-corner-radius. Then, niri will know the corner radius and
|
||||
// draw the shadow correctly, without having to draw it behind the
|
||||
// window. These will also remove client-side shadows if the window
|
||||
// draws any.
|
||||
//
|
||||
//draw-behind-window false
|
||||
|
||||
// You can change how shadows look. The values below are in logical
|
||||
// pixels and match the CSS box-shadow properties.
|
||||
|
||||
// Softness controls the shadow blur radius.
|
||||
softness 30
|
||||
|
||||
// Spread expands the shadow.
|
||||
spread 5
|
||||
|
||||
// Offset moves the shadow relative to the window.
|
||||
offset x=0 y=5
|
||||
|
||||
// You can also change the shadow color and opacity.
|
||||
color "#0007"
|
||||
}
|
||||
|
||||
// Struts shrink the area occupied by windows, similarly to layer-shell panels.
|
||||
// You can think of them as a kind of outer gaps. They are set in logical pixels.
|
||||
// Left and right struts will cause the next window to the side to always be visible.
|
||||
// Top and bottom struts will simply add outer gaps in addition to the area occupied by
|
||||
// layer-shell panels and regular gaps.
|
||||
struts {
|
||||
left 24
|
||||
right 24
|
||||
// top 64
|
||||
// bottom 64
|
||||
}
|
||||
}
|
||||
|
||||
// Add lines like this to spawn processes at startup.
|
||||
// Note that running niri as a session supports xdg-desktop-autostart,
|
||||
// which may be more convenient to use.
|
||||
// See the binds section below for more spawn examples.
|
||||
// spawn-at-startup "alacritty" "-e" "fish"
|
||||
spawn-at-startup "foot" "--server"
|
||||
spawn-at-startup "xwayland-satellite"
|
||||
spawn-at-startup "mako"
|
||||
spawn-at-startup "swww-daemon"
|
||||
spawn-at-startup "waybar"
|
||||
spawn-at-startup "swayidle" "-w" "timeout" "601" "niri msg action power-off-monitors" "timeout" "600" "swaylock -f" "before-sleep" "swaylock -f"
|
||||
|
||||
// Uncomment this line to ask the clients to omit their client-side decorations if possible.
|
||||
// If the client will specifically ask for CSD, the request will be honored.
|
||||
// Additionally, clients will be informed that they are tiled, removing some client-side rounded corners.
|
||||
// This option will also fix border/focus ring drawing behind some semitransparent windows.
|
||||
// After enabling or disabling this, you need to restart the apps for this to take effect.
|
||||
prefer-no-csd
|
||||
|
||||
// You can change the path where screenshots are saved.
|
||||
// A ~ at the front will be expanded to the home directory.
|
||||
// The path is formatted with strftime(3) to give you the screenshot date and time.
|
||||
screenshot-path "~/Pictures/screenshots/screenshot-%Y-%m-%d %H-%M-%S.png"
|
||||
|
||||
// You can also set this to null to disable saving screenshots to disk.
|
||||
// screenshot-path null
|
||||
|
||||
// Animation settings.
|
||||
// The wiki explains how to configure individual animations:
|
||||
// https://github.com/YaLTeR/niri/wiki/Configuration:-Animations
|
||||
animations {
|
||||
// Uncomment to turn off all animations.
|
||||
off
|
||||
|
||||
// Slow down all animations by this factor. Values below 1 speed them up instead.
|
||||
// slowdown 3.0
|
||||
}
|
||||
|
||||
// Window rules let you adjust behavior for individual windows.
|
||||
// Find more information on the wiki:
|
||||
// https://github.com/YaLTeR/niri/wiki/Configuration:-Window-Rules
|
||||
|
||||
// Work around WezTerm's initial configure bug
|
||||
// by setting an empty default-column-width.
|
||||
window-rule {
|
||||
// This regular expression is intentionally made as specific as possible,
|
||||
// since this is the default config, and we want no false positives.
|
||||
// You can get away with just app-id="wezterm" if you want.
|
||||
match app-id=r#"^org\.wezfurlong\.wezterm$"#
|
||||
default-column-width {}
|
||||
}
|
||||
|
||||
// Open the Firefox picture-in-picture player as floating by default.
|
||||
window-rule {
|
||||
// This app-id regular expression will work for both:
|
||||
// - host Firefox (app-id is "firefox")
|
||||
// - Flatpak Firefox (app-id is "org.mozilla.firefox")
|
||||
match app-id=r#"firefox$"# title="^Picture-in-Picture$"
|
||||
match app-id=r#"firefox$"# title="^Bitwarden$"
|
||||
match app-id=r#"firefox$"# title="^Extension: (Bitwarden Password Manager) - Bitwarden — Mozilla Firefox$"
|
||||
match app-id=r#"Bitwarden$"#
|
||||
open-floating true
|
||||
}
|
||||
|
||||
//niri overview python script.
|
||||
window-rule {
|
||||
match app-id=r#"niri-overview.py"#
|
||||
match app-id=r#"niri_overview.py"#
|
||||
match app-id=r#"niri_overview.bin"#
|
||||
match app-id=r#"niri_overview"#
|
||||
open-focused true
|
||||
open-floating true
|
||||
default-window-height { proportion 0.5; }
|
||||
default-column-width { proportion 0.8; }
|
||||
}
|
||||
|
||||
//fix steam notifications to bottom rigth
|
||||
window-rule {
|
||||
match app-id="steam" title=r#"^notificationtoasts_\d+_desktop$"#
|
||||
default-floating-position x=10 y=10 relative-to="bottom-right"
|
||||
}
|
||||
|
||||
|
||||
// Example: block out two password managers from screen capture.
|
||||
// (This example rule is commented out with a "/-" in front.)
|
||||
/-window-rule {
|
||||
match app-id=r#"^org\.keepassxc\.KeePassXC$"#
|
||||
match app-id=r#"^org\.gnome\.World\.Secrets$"#
|
||||
match app-id=r#"^Bitwarden$"#
|
||||
|
||||
block-out-from "screen-capture"
|
||||
|
||||
// Use this instead if you want them visible on third-party screenshot tools.
|
||||
// block-out-from "screencast"
|
||||
}
|
||||
|
||||
// Example: enable rounded corners for all windows.
|
||||
// (This example rule is commented out with a "/-" in front.)
|
||||
/-window-rule {
|
||||
geometry-corner-radius 12
|
||||
clip-to-geometry true
|
||||
}
|
||||
|
||||
window-rule {
|
||||
geometry-corner-radius 12
|
||||
clip-to-geometry true
|
||||
}
|
||||
|
||||
binds {
|
||||
// Keys consist of modifiers separated by + signs, followed by an XKB key name
|
||||
// in the end. To find an XKB name for a particular key, you may use a program
|
||||
// like wev.
|
||||
//
|
||||
// "Mod" is a special modifier equal to Super when running on a TTY, and to Alt
|
||||
// when running as a winit window.
|
||||
//
|
||||
// Most actions that you can bind here can also be invoked programmatically with
|
||||
// `niri msg action do-something`.
|
||||
|
||||
// Mod-Shift-/, which is usually the same as Mod-?,
|
||||
// shows a list of important hotkeys.
|
||||
Mod+Shift+Slash { show-hotkey-overlay; }
|
||||
|
||||
// spawn niri overview script
|
||||
Mod+Slash { spawn "/home/gunalx/.config/niri/niri_overview/niri_overview.bin"; }
|
||||
// for next release
|
||||
// Mod+Slash { toggle-overview; }
|
||||
|
||||
// Suggested binds for running programs: terminal, app launcher, screen locker.
|
||||
Mod+Return { spawn "foot"; }
|
||||
Mod+D { spawn "fuzzel"; }
|
||||
Super+M { spawn "swaylock"; }
|
||||
|
||||
// You can also use a shell. Do this if you need pipes, multiple commands, etc.
|
||||
// Note: the entire command goes as a single argument in the end.
|
||||
// Mod+T { spawn "bash" "-c" "notify-send hello && exec alacritty"; }
|
||||
|
||||
// Example volume keys mappings for PipeWire & WirePlumber.
|
||||
// The allow-when-locked=true property makes them work even when the session is locked.
|
||||
XF86AudioRaiseVolume allow-when-locked=true { spawn "wpctl" "set-volume" "@DEFAULT_AUDIO_SINK@" "0.1+"; }
|
||||
XF86AudioLowerVolume allow-when-locked=true { spawn "wpctl" "set-volume" "@DEFAULT_AUDIO_SINK@" "0.1-"; }
|
||||
XF86AudioMute allow-when-locked=true { spawn "wpctl" "set-mute" "@DEFAULT_AUDIO_SINK@" "toggle"; }
|
||||
XF86AudioMicMute allow-when-locked=true { spawn "wpctl" "set-mute" "@DEFAULT_AUDIO_SOURCE@" "toggle"; }
|
||||
|
||||
Mod+Shift+Q { close-window; }
|
||||
|
||||
Mod+Left { focus-column-left; }
|
||||
Mod+Down { focus-window-down; }
|
||||
Mod+Up { focus-window-up; }
|
||||
Mod+Right { focus-column-right; }
|
||||
Mod+H { focus-column-left; }
|
||||
Mod+J { focus-window-down; }
|
||||
Mod+K { focus-window-up; }
|
||||
Mod+L { focus-column-right; }
|
||||
|
||||
Alt+Tab { focus-window-previous; }
|
||||
|
||||
Mod+Ctrl+Left { move-column-left; }
|
||||
Mod+Ctrl+Down { move-window-down; }
|
||||
Mod+Ctrl+Up { move-window-up; }
|
||||
Mod+Ctrl+Right { move-column-right; }
|
||||
Mod+Ctrl+H { move-column-left; }
|
||||
Mod+Ctrl+J { move-window-down; }
|
||||
Mod+Ctrl+K { move-window-up; }
|
||||
Mod+Ctrl+L { move-column-right; }
|
||||
|
||||
// Alternative commands that move across workspaces when reaching
|
||||
// the first or last window in a column.
|
||||
// Mod+J { focus-window-or-workspace-down; }
|
||||
// Mod+K { focus-window-or-workspace-up; }
|
||||
// Mod+Ctrl+J { move-window-down-or-to-workspace-down; }
|
||||
// Mod+Ctrl+K { move-window-up-or-to-workspace-up; }
|
||||
|
||||
Mod+Home { focus-column-first; }
|
||||
Mod+End { focus-column-last; }
|
||||
Mod+Ctrl+Home { move-column-to-first; }
|
||||
Mod+Ctrl+End { move-column-to-last; }
|
||||
|
||||
Mod+Shift+Left { focus-monitor-left; }
|
||||
Mod+Shift+Down { focus-monitor-down; }
|
||||
Mod+Shift+Up { focus-monitor-up; }
|
||||
Mod+Shift+Right { focus-monitor-right; }
|
||||
Mod+Shift+H { focus-monitor-left; }
|
||||
Mod+Shift+J { focus-monitor-down; }
|
||||
Mod+Shift+K { focus-monitor-up; }
|
||||
Mod+Shift+L { focus-monitor-right; }
|
||||
|
||||
Mod+Shift+Ctrl+Left { move-column-to-monitor-left; }
|
||||
Mod+Shift+Ctrl+Down { move-column-to-monitor-down; }
|
||||
Mod+Shift+Ctrl+Up { move-column-to-monitor-up; }
|
||||
Mod+Shift+Ctrl+Right { move-column-to-monitor-right; }
|
||||
Mod+Shift+Ctrl+H { move-column-to-monitor-left; }
|
||||
Mod+Shift+Ctrl+J { move-column-to-monitor-down; }
|
||||
Mod+Shift+Ctrl+K { move-column-to-monitor-up; }
|
||||
Mod+Shift+Ctrl+L { move-column-to-monitor-right; }
|
||||
|
||||
// Alternatively, there are commands to move just a single window:
|
||||
// Mod+Shift+Ctrl+Left { move-window-to-monitor-left; }
|
||||
// ...
|
||||
|
||||
// And you can also move a whole workspace to another monitor:
|
||||
// Mod+Shift+Ctrl+Left { move-workspace-to-monitor-left; }
|
||||
// ...
|
||||
|
||||
Mod+Page_Down { focus-workspace-down; }
|
||||
Mod+Page_Up { focus-workspace-up; }
|
||||
Mod+U { focus-workspace-down; }
|
||||
Mod+I { focus-workspace-up; }
|
||||
Mod+Ctrl+Page_Down { move-column-to-workspace-down; }
|
||||
Mod+Ctrl+Page_Up { move-column-to-workspace-up; }
|
||||
Mod+Ctrl+U { move-column-to-workspace-down; }
|
||||
Mod+Ctrl+I { move-column-to-workspace-up; }
|
||||
|
||||
// Alternatively, there are commands to move just a single window:
|
||||
// Mod+Ctrl+Page_Down { move-window-to-workspace-down; }
|
||||
// ...
|
||||
|
||||
Mod+Shift+Page_Down { move-workspace-down; }
|
||||
Mod+Shift+Page_Up { move-workspace-up; }
|
||||
Mod+Shift+U { move-workspace-down; }
|
||||
Mod+Shift+I { move-workspace-up; }
|
||||
|
||||
// You can bind mouse wheel scroll ticks using the following syntax.
|
||||
// These binds will change direction based on the natural-scroll setting.
|
||||
//
|
||||
// To avoid scrolling through workspaces really fast, you can use
|
||||
// the cooldown-ms property. The bind will be rate-limited to this value.
|
||||
// You can set a cooldown on any bind, but it's most useful for the wheel.
|
||||
Mod+WheelScrollDown cooldown-ms=150 { focus-workspace-down; }
|
||||
Mod+WheelScrollUp cooldown-ms=150 { focus-workspace-up; }
|
||||
Mod+Ctrl+WheelScrollDown cooldown-ms=150 { move-column-to-workspace-down; }
|
||||
Mod+Ctrl+WheelScrollUp cooldown-ms=150 { move-column-to-workspace-up; }
|
||||
|
||||
Mod+WheelScrollRight { focus-column-right; }
|
||||
Mod+WheelScrollLeft { focus-column-left; }
|
||||
Mod+Ctrl+WheelScrollRight { move-column-right; }
|
||||
Mod+Ctrl+WheelScrollLeft { move-column-left; }
|
||||
|
||||
// Usually scrolling up and down with Shift in applications results in
|
||||
// horizontal scrolling; these binds replicate that.
|
||||
Mod+Shift+WheelScrollDown { focus-column-right; }
|
||||
Mod+Shift+WheelScrollUp { focus-column-left; }
|
||||
Mod+Ctrl+Shift+WheelScrollDown { move-column-right; }
|
||||
Mod+Ctrl+Shift+WheelScrollUp { move-column-left; }
|
||||
|
||||
// Similarly, you can bind touchpad scroll "ticks".
|
||||
// Touchpad scrolling is continuous, so for these binds it is split into
|
||||
// discrete intervals.
|
||||
// These binds are also affected by touchpad's natural-scroll, so these
|
||||
// example binds are "inverted", since we have natural-scroll enabled for
|
||||
// touchpads by default.
|
||||
// Mod+TouchpadScrollDown { spawn "wpctl" "set-volume" "@DEFAULT_AUDIO_SINK@" "0.02+"; }
|
||||
// Mod+TouchpadScrollUp { spawn "wpctl" "set-volume" "@DEFAULT_AUDIO_SINK@" "0.02-"; }
|
||||
|
||||
// You can refer to workspaces by index. However, keep in mind that
|
||||
// niri is a dynamic workspace system, so these commands are kind of
|
||||
// "best effort". Trying to refer to a workspace index bigger than
|
||||
// the current workspace count will instead refer to the bottommost
|
||||
// (empty) workspace.
|
||||
//
|
||||
// For example, with 2 workspaces + 1 empty, indices 3, 4, 5 and so on
|
||||
// will all refer to the 3rd workspace.
|
||||
Mod+1 { focus-workspace 1; }
|
||||
Mod+2 { focus-workspace 2; }
|
||||
Mod+3 { focus-workspace 3; }
|
||||
Mod+4 { focus-workspace 4; }
|
||||
Mod+5 { focus-workspace 5; }
|
||||
Mod+6 { focus-workspace 6; }
|
||||
Mod+7 { focus-workspace 7; }
|
||||
Mod+8 { focus-workspace 8; }
|
||||
Mod+9 { focus-workspace 9; }
|
||||
Mod+Ctrl+1 { move-column-to-workspace 1; }
|
||||
Mod+Ctrl+2 { move-column-to-workspace 2; }
|
||||
Mod+Ctrl+3 { move-column-to-workspace 3; }
|
||||
Mod+Ctrl+4 { move-column-to-workspace 4; }
|
||||
Mod+Ctrl+5 { move-column-to-workspace 5; }
|
||||
Mod+Ctrl+6 { move-column-to-workspace 6; }
|
||||
Mod+Ctrl+7 { move-column-to-workspace 7; }
|
||||
Mod+Ctrl+8 { move-column-to-workspace 8; }
|
||||
Mod+Ctrl+9 { move-column-to-workspace 9; }
|
||||
|
||||
// Alternatively, there are commands to move just a single window:
|
||||
// Mod+Ctrl+1 { move-window-to-workspace 1; }
|
||||
|
||||
// Switches focus between the current and the previous workspace.
|
||||
// Mod+Tab { focus-workspace-previous; }
|
||||
|
||||
// The following binds move the focused window in and out of a column.
|
||||
// If the window is alone, they will consume it into the nearby column to the side.
|
||||
// If the window is already in a column, they will expel it out.
|
||||
Mod+BracketLeft { consume-or-expel-window-left; }
|
||||
Mod+BracketRight { consume-or-expel-window-right; }
|
||||
|
||||
// Consume one window from the right to the bottom of the focused column.
|
||||
Mod+Comma { consume-window-into-column; }
|
||||
// Expel the bottom window from the focused column to the right.
|
||||
Mod+Period { expel-window-from-column; }
|
||||
|
||||
Mod+R { switch-preset-column-width; }
|
||||
Mod+Shift+R { switch-preset-window-height; }
|
||||
Mod+Ctrl+R { reset-window-height; }
|
||||
Mod+F { maximize-column; }
|
||||
Mod+Shift+F { fullscreen-window; }
|
||||
|
||||
// Expand the focused column to space not taken up by other fully visible columns.
|
||||
// Makes the column "fill the rest of the space".
|
||||
Mod+Ctrl+F { expand-column-to-available-width; }
|
||||
|
||||
Mod+C { center-column; }
|
||||
|
||||
// Finer width adjustments.
|
||||
// This command can also:
|
||||
// * set width in pixels: "1000"
|
||||
// * adjust width in pixels: "-5" or "+5"
|
||||
// * set width as a percentage of screen width: "25%"
|
||||
// * adjust width as a percentage of screen width: "-10%" or "+10%"
|
||||
// Pixel sizes use logical, or scaled, pixels. I.e. on an output with scale 2.0,
|
||||
// set-column-width "100" will make the column occupy 200 physical screen pixels.
|
||||
Mod+Minus { set-column-width "-10%"; }
|
||||
Mod+Equal { set-column-width "+10%"; }
|
||||
|
||||
// Finer height adjustments when in column with other windows.
|
||||
Mod+Shift+Minus { set-window-height "-10%"; }
|
||||
Mod+Shift+Equal { set-window-height "+10%"; }
|
||||
|
||||
// Move the focused window between the floating and the tiling layout.
|
||||
Mod+V { toggle-window-floating; }
|
||||
Mod+Shift+V { switch-focus-between-floating-and-tiling; }
|
||||
|
||||
// Toggle tabbed column display mode.
|
||||
// Windows in this column will appear as vertical tabs,
|
||||
// rather than stacked on top of each other.
|
||||
Mod+W { toggle-column-tabbed-display; }
|
||||
|
||||
// Actions to switch layouts.
|
||||
// Note: if you uncomment these, make sure you do NOT have
|
||||
// a matching layout switch hotkey configured in xkb options above.
|
||||
// Having both at once on the same hotkey will break the switching,
|
||||
// since it will switch twice upon pressing the hotkey (once by xkb, once by niri).
|
||||
// Mod+Space { switch-layout "next"; }
|
||||
// Mod+Shift+Space { switch-layout "prev"; }
|
||||
|
||||
Print { screenshot; }
|
||||
Ctrl+Print { screenshot-screen; }
|
||||
Alt+Print { screenshot-window; }
|
||||
|
||||
// Applications such as remote-desktop clients and software KVM switches may
|
||||
// request that niri stops processing the keyboard shortcuts defined here
|
||||
// so they may, for example, forward the key presses as-is to a remote machine.
|
||||
// It's a good idea to bind an escape hatch to toggle the inhibitor,
|
||||
// so a buggy application can't hold your session hostage.
|
||||
//
|
||||
// The allow-inhibiting=false property can be applied to other binds as well,
|
||||
// which ensures niri always processes them, even when an inhibitor is active.
|
||||
Mod+Escape allow-inhibiting=false { toggle-keyboard-shortcuts-inhibit; }
|
||||
|
||||
// The quit action will show a confirmation dialog to avoid accidental exits.
|
||||
Mod+Shift+E { quit; }
|
||||
Ctrl+Alt+Delete { quit; }
|
||||
|
||||
// Powers off the monitors. To turn them back on, do any input like
|
||||
// moving the mouse or pressing any other key.
|
||||
Mod+Shift+P { power-off-monitors; }
|
||||
}
|
||||
|
||||
|
||||
//Enviroment to be set.
|
||||
environment {
|
||||
DISPLAY ":0"
|
||||
ELECTRON_OZONE_PLATFORM_HINT "auto"
|
||||
}
|
||||
|
||||
'';
|
||||
|
||||
|
||||
in
|
||||
{
|
||||
imports = [
|
||||
./waybar.nix
|
||||
./wallpapers.nix
|
||||
./foot.nix
|
||||
./swaylock.nix
|
||||
./wlogout.nix
|
||||
./mako.nix
|
||||
./fonts.nix
|
||||
./fcitx5.nix
|
||||
];
|
||||
|
||||
|
||||
home.packages = with pkgs; [
|
||||
niri
|
||||
wl-clipboard
|
||||
pass-wayland
|
||||
wev
|
||||
|
||||
#term
|
||||
foot
|
||||
|
||||
wdisplays
|
||||
swww
|
||||
|
||||
wleave
|
||||
|
||||
xwayland-satellite
|
||||
|
||||
#bar applets and notifications
|
||||
waybar
|
||||
networkmanagerapplet
|
||||
networkmanager
|
||||
libsForQt5.networkmanager-qt
|
||||
|
||||
|
||||
mako
|
||||
|
||||
swayidle
|
||||
|
||||
#ligth and sound
|
||||
brightnessctl
|
||||
pavucontrol
|
||||
|
||||
fuzzel
|
||||
|
||||
emote
|
||||
|
||||
|
||||
#fonts
|
||||
nerdfonts
|
||||
noto-fonts
|
||||
noto-fonts-cjk-sans
|
||||
noto-fonts-emoji
|
||||
liberation_ttf
|
||||
fira-code
|
||||
fira-code-symbols
|
||||
nerdfonts
|
||||
ubuntu_font_family
|
||||
zpix-pixel-font
|
||||
_0xproto
|
||||
font-awesome
|
||||
font-awesome_5
|
||||
font-awesome_4
|
||||
|
||||
];
|
||||
|
||||
# Drop the interpolated KDL into ~/.config/niri/config.kdl
|
||||
home.file.".config/niri/config.kdl" = {
|
||||
text = niriConfig;
|
||||
};
|
||||
}
|
||||
@@ -17,6 +17,7 @@ in
|
||||
./fcitx5.nix
|
||||
./kanshi.nix
|
||||
./swaylock.nix
|
||||
./mako.nix
|
||||
#./assets/wallpapers
|
||||
];
|
||||
|
||||
|
||||
@@ -14,7 +14,7 @@ in
|
||||
scaling = "fill"; # e.g. --scaling=fill
|
||||
|
||||
# authentication grace
|
||||
grace = 15; # --grace
|
||||
grace = 3; # --grace
|
||||
submit-on-touch = true; # --submit-on-touch
|
||||
|
||||
# clock
|
||||
|
||||
23
home/gunalx/wallpapers.nix
Normal file
@@ -0,0 +1,23 @@
|
||||
{ lib, config, ... }:
|
||||
|
||||
let
|
||||
# Path to your source folder of wallpapers
|
||||
wallpaperSrc = ./wallpapers;
|
||||
|
||||
# Read all file names in that directory
|
||||
names = lib.attrNames (builtins.readDir wallpaperSrc);
|
||||
|
||||
# For each name, produce an attrset mapping
|
||||
wallpaperFiles = map (name:
|
||||
{
|
||||
# quoted string keys are valid attribute names
|
||||
"Pictures/wallpapers/${name}" = {
|
||||
source = "${wallpaperSrc}/${name}";
|
||||
};
|
||||
}
|
||||
) names;
|
||||
in
|
||||
{
|
||||
# Merge them all under home.file
|
||||
home.file = lib.mkMerge wallpaperFiles;
|
||||
}
|
||||
|
Before Width: | Height: | Size: 48 KiB After Width: | Height: | Size: 48 KiB |
BIN
home/gunalx/wallpapers/evergarden2.jpg
Normal file
|
After Width: | Height: | Size: 1016 KiB |
BIN
home/gunalx/wallpapers/milkywayanime.jpg
Normal file
|
After Width: | Height: | Size: 1.6 MiB |
BIN
home/gunalx/wallpapers/stars.jpg
Normal file
|
After Width: | Height: | Size: 1.8 MiB |
|
After Width: | Height: | Size: 488 KiB |
|
Before Width: | Height: | Size: 3.3 MiB After Width: | Height: | Size: 3.3 MiB |
BIN
home/gunalx/wallpapers/wp4586807-aesthetic-anime-wallpapers.jpg
Normal file
|
After Width: | Height: | Size: 307 KiB |
|
After Width: | Height: | Size: 307 KiB |
BIN
home/gunalx/wallpapers/wp4714974-japan-aesthetic-wallpapers.jpg
Normal file
|
After Width: | Height: | Size: 940 KiB |
|
After Width: | Height: | Size: 148 KiB |
|
After Width: | Height: | Size: 376 KiB |
|
After Width: | Height: | Size: 480 KiB |
|
After Width: | Height: | Size: 96 KiB |
|
After Width: | Height: | Size: 771 KiB |
|
After Width: | Height: | Size: 231 KiB |
|
After Width: | Height: | Size: 334 KiB |
|
After Width: | Height: | Size: 793 KiB |
|
After Width: | Height: | Size: 3.2 MiB |
BIN
home/gunalx/wallpapers/wp5897845-retro-anime-city-wallpapers.jpg
Normal file
|
After Width: | Height: | Size: 156 KiB |
|
After Width: | Height: | Size: 60 KiB |
|
After Width: | Height: | Size: 257 KiB |
|
After Width: | Height: | Size: 392 KiB |
|
After Width: | Height: | Size: 87 KiB |
|
After Width: | Height: | Size: 90 KiB |
|
After Width: | Height: | Size: 840 KiB |
@@ -1,376 +1,215 @@
|
||||
{ pkgs, inputs, lib, config, nix-colors, ... }:
|
||||
{ config, pkgs, lib, inputs, ... }:
|
||||
|
||||
let
|
||||
# Import Base16 palette & hex→RGB helper
|
||||
inherit (inputs.nix-colors.lib.conversions) hexToRGBString;
|
||||
inherit (config.colorscheme) palette;
|
||||
|
||||
# Build "rgba(r,g,b,a)" strings
|
||||
toRGBA = colour: alpha:
|
||||
let rgb = hexToRGBString "," (lib.removePrefix "#" colour);
|
||||
in "rgba(${rgb},${alpha})";
|
||||
in
|
||||
{
|
||||
imports = [
|
||||
];
|
||||
|
||||
|
||||
|
||||
programs.waybar = let
|
||||
inherit (inputs.nix-colors.lib.conversions) hexToRGBString;
|
||||
inherit (config.colorscheme) colors;
|
||||
inherit (config.colorscheme) palette;
|
||||
toRGBA = color: opacity: "rgba(${hexToRGBString "," (lib.removePrefix "#" color)},${opacity})";
|
||||
in {
|
||||
|
||||
programs.waybar = {
|
||||
enable = true;
|
||||
|
||||
# Single-bar JSON config
|
||||
settings = [
|
||||
(builtins.fromJSON ''
|
||||
{
|
||||
"height": 30,
|
||||
"spacing": 2,
|
||||
"modules-left": ["sway/workspaces","niri/workspaces"],
|
||||
"modules-center": ["niri/window"],
|
||||
"modules-right": [
|
||||
"idle_inhibitor","backlight","pulseaudio","keyboard-state",
|
||||
"network","cpu","memory","temperature","battery",
|
||||
"power-profiles-daemon","clock","tray","custom/power"
|
||||
],
|
||||
|
||||
"sway/workspaces": {
|
||||
"format": "{index}: {name} - {icon}",
|
||||
"format-icons": {
|
||||
"focused":"","active":"","default":""
|
||||
},
|
||||
"all-outputs": false,
|
||||
"current-only": false,
|
||||
"persistent": true,
|
||||
"on-click": "swaymsg workspace number {index}"
|
||||
},
|
||||
|
||||
"niri/workspaces": {
|
||||
"format": "{index}: {name} - {icon}",
|
||||
"format-icons": {
|
||||
"focused":"","active":"","default":""
|
||||
},
|
||||
"all-outputs": false,
|
||||
"current-only": false,
|
||||
"persistent": true,
|
||||
"on-click": "niri msg workspace {index}"
|
||||
},
|
||||
|
||||
"niri/window": {
|
||||
"format": "{title}"
|
||||
},
|
||||
|
||||
"idle_inhibitor": {
|
||||
"format": "{icon}",
|
||||
"format-icons": { "activated":"","deactivated":"" }
|
||||
},
|
||||
|
||||
"backlight": {
|
||||
"format": "{percent}% {icon}",
|
||||
"format-icons": ["","","","","","","","",""]
|
||||
},
|
||||
|
||||
"pulseaudio": {
|
||||
"format": "{volume}% {icon}",
|
||||
"format-muted": "",
|
||||
"format-icons": { "default": ["","",""] },
|
||||
"on-click": "pavucontrol"
|
||||
},
|
||||
|
||||
"keyboard-state": {
|
||||
"numlock": true,
|
||||
"capslock": true,
|
||||
"format": "{icon}",
|
||||
"format-icons": { "locked":"","unlocked":"" }
|
||||
},
|
||||
|
||||
"network": {
|
||||
"format-wifi": " {essid} ({signalStrength}%)",
|
||||
"format-ethernet": " {ipaddr}",
|
||||
"format-disconnected": "⚠ Disconnected"
|
||||
},
|
||||
|
||||
"cpu": { "format": " {usage}%" },
|
||||
"memory": { "format": " {used:0.1f}G" },
|
||||
|
||||
"temperature": {
|
||||
"format": "{temperatureC}°C ",
|
||||
"critical-threshold": 80
|
||||
},
|
||||
|
||||
"battery": {
|
||||
"format": "{capacity}% {icon}",
|
||||
"format-icons": ["","","","",""],
|
||||
"format-charging": "{capacity}% ",
|
||||
"states": { "warning": 30, "critical": 15 }
|
||||
},
|
||||
|
||||
"power-profiles-daemon": {
|
||||
"format": "{icon}",
|
||||
"format-icons": {
|
||||
"performance":"","balanced":"","power-saver":""
|
||||
},
|
||||
"on-click": "systemctl --user power-profiles-daemon set balanced"
|
||||
},
|
||||
|
||||
"power-profiles-daemon": {
|
||||
"format": "{icon}",
|
||||
"tooltip-format": "Power profile: {profile}nDriver: {driver}",
|
||||
"tooltip": true,
|
||||
"format-icons": {
|
||||
"default": "",
|
||||
"performance": "",
|
||||
"balanced": "",
|
||||
"power-saver": ""
|
||||
}
|
||||
},
|
||||
|
||||
"clock": {
|
||||
"format": "{:%H:%M}",
|
||||
"format-alt": "{:%Y-%m-%d}"
|
||||
},
|
||||
|
||||
"tray": {
|
||||
"spacing": 6
|
||||
},
|
||||
|
||||
"custom/power": {
|
||||
"format": "⏻",
|
||||
"tooltip": "exit",
|
||||
"on-click": "wleave"
|
||||
}
|
||||
}
|
||||
'')
|
||||
];
|
||||
|
||||
# CSS style for Waybar
|
||||
style = ''
|
||||
* {
|
||||
/* `otf-font-awesome` is required to be installed for icons */
|
||||
font-family: FontAwesome, Roboto, Helvetica, Arial, sans-serif;
|
||||
font-size: 13px;
|
||||
}
|
||||
/* Base font */
|
||||
* { font-family: FontAwesome, Roboto, sans-serif; font-size: 13px; }
|
||||
|
||||
window#waybar {
|
||||
background-color: #${palette.base00};
|
||||
border-bottom: 3px solid #${palette.base03};
|
||||
color: ${toRGBA palette.base05 "0.7"};
|
||||
transition-property: background-color;
|
||||
transition-duration: .5s;
|
||||
}
|
||||
/* Bar container */
|
||||
window#waybar {
|
||||
background-color: ${toRGBA palette.base00 "0.5"};
|
||||
border-radius: 12px;
|
||||
padding: 4px 20px;
|
||||
border: none;
|
||||
}
|
||||
|
||||
window#waybar.hidden {
|
||||
opacity: 0.2;
|
||||
}
|
||||
/* Workspace margin */
|
||||
#sway-workspaces,#niri-workspaces { margin-left: 12px; }
|
||||
|
||||
/*
|
||||
window#waybar.empty {
|
||||
background-color: transparent;
|
||||
}
|
||||
window#waybar.solo {
|
||||
background-color: #${palette.base07};
|
||||
}
|
||||
*/
|
||||
/* Module blocks */
|
||||
#idle_inhibitor,#backlight,#pulseaudio,#keyboard-state,
|
||||
#network,#cpu,#memory,#temperature,#battery,
|
||||
#power-profiles-daemon,#clock,#tray,#custom-power,#niri-window {
|
||||
background-color: ${toRGBA palette.base01 "0.4"};
|
||||
border-radius: 8px;
|
||||
margin: 0 6px;
|
||||
padding: 0 10px;
|
||||
border: 1px solid ${toRGBA palette.base07 "0.6"};
|
||||
}
|
||||
|
||||
window#waybar.termite {
|
||||
background-color: #${palette.base03};
|
||||
}
|
||||
/* Hover effect */
|
||||
#idle_inhibitor:hover,#backlight:hover,#pulseaudio:hover,
|
||||
#keyboard-state:hover,#network:hover,#cpu:hover,#memory:hover,
|
||||
#temperature:hover,#battery:hover,#power-profiles-daemon:hover,
|
||||
#clock:hover,#tray:hover,#custom-power:hover,#niri-window:hover {
|
||||
background-color: ${toRGBA palette.base02 "0.5"};
|
||||
}
|
||||
|
||||
window#waybar.chromium {
|
||||
background-color: #${palette.base00};
|
||||
border: none;
|
||||
}
|
||||
/* Workspace buttons */
|
||||
#sway-workspaces button,#niri-workspaces button {
|
||||
padding: 0 6px;
|
||||
background: transparent;
|
||||
color: ${toRGBA palette.base05 "0.9"};
|
||||
border: none;
|
||||
border-radius: 6px;
|
||||
}
|
||||
#sway-workspaces button:hover,#niri-workspaces button:hover {
|
||||
background-color: ${toRGBA palette.base02 "0.5"};
|
||||
}
|
||||
#sway-workspaces button.focused,#niri-workspaces button.focused {
|
||||
background-color: ${toRGBA palette.base03 "0.6"};
|
||||
box-shadow: inset 0 -3px ${toRGBA palette.base05 "0.8"};
|
||||
}
|
||||
#sway-workspaces button.urgent,#niri-workspaces button.urgent {
|
||||
background-color: ${toRGBA palette.base08 "0.7"};
|
||||
}
|
||||
|
||||
button {
|
||||
/* Use box-shadow instead of border so the text isn't offset */
|
||||
box-shadow: inset 0 -3px transparent;
|
||||
/* Avoid rounded borders under each button name */
|
||||
border: none;
|
||||
border-radius: 0;
|
||||
}
|
||||
/* Right‐hand text color */
|
||||
#clock,#battery,#cpu,#memory,#temperature,#backlight,
|
||||
#network,#pulseaudio,#tray,#power-profiles-daemon,#custom-power {
|
||||
color: ${toRGBA palette.base05 "0.9"};
|
||||
}
|
||||
|
||||
/* https://github.com/Alexays/Waybar/wiki/FAQ#the-workspace-buttons-have-a-strange-hover-effect */
|
||||
button:hover {
|
||||
background: inherit;
|
||||
box-shadow: inset 0 -3px #${palette.base05};
|
||||
}
|
||||
|
||||
/* you can set a style on hover for any module like this */
|
||||
#pulseaudio:hover {
|
||||
background-color: #${palette.base0A};
|
||||
}
|
||||
|
||||
#workspaces button {
|
||||
padding: 0 5px;
|
||||
background-color: transparent;
|
||||
color: #${palette.base05};
|
||||
}
|
||||
|
||||
#workspaces button:hover {
|
||||
background: #${palette.base00};
|
||||
}
|
||||
|
||||
#workspaces button.focused {
|
||||
background-color: #${palette.base03};
|
||||
box-shadow: inset 0 -3px #${palette.base05};
|
||||
}
|
||||
|
||||
#workspaces button.urgent {
|
||||
background-color: #${palette.base08};
|
||||
}
|
||||
|
||||
#mode {
|
||||
background-color: #${palette.base03};
|
||||
box-shadow: inset 0 -3px #${palette.base05};
|
||||
}
|
||||
|
||||
#clock,
|
||||
#battery,
|
||||
#cpu,
|
||||
#memory,
|
||||
#disk,
|
||||
#temperature,
|
||||
#backlight,
|
||||
#network,
|
||||
#pulseaudio,
|
||||
#wireplumber,
|
||||
#custom-media,
|
||||
#tray,
|
||||
#mode,
|
||||
#idle_inhibitor,
|
||||
#scratchpad,
|
||||
#power-profiles-daemon,
|
||||
#mpd {
|
||||
padding: 0 10px;
|
||||
color: #${palette.base05};
|
||||
}
|
||||
|
||||
#window,
|
||||
#workspaces {
|
||||
margin: 0 4px;
|
||||
}
|
||||
|
||||
/* If workspaces is the leftmost module, omit left margin */
|
||||
.modules-left > widget:first-child > #workspaces {
|
||||
margin-left: 0;
|
||||
}
|
||||
|
||||
/* If workspaces is the rightmost module, omit right margin */
|
||||
.modules-right > widget:last-child > #workspaces {
|
||||
margin-right: 0;
|
||||
}
|
||||
|
||||
#clock {
|
||||
background-color: #${palette.base03};
|
||||
}
|
||||
|
||||
#battery {
|
||||
background-color: #${palette.base05};
|
||||
color: #${palette.base00};
|
||||
}
|
||||
|
||||
#battery.charging, #battery.plugged {
|
||||
color: #${palette.base05};
|
||||
background-color: #${palette.base0B};
|
||||
}
|
||||
|
||||
@keyframes blink {
|
||||
to {
|
||||
background-color: #${palette.base05};
|
||||
color: #${palette.base00};
|
||||
}
|
||||
}
|
||||
|
||||
/* Using steps() instead of linear as a timing function to limit cpu usage */
|
||||
#battery.critical:not(.charging) {
|
||||
background-color: #${palette.base08};
|
||||
color: #${palette.base05};
|
||||
animation-name: blink;
|
||||
animation-duration: 0.5s;
|
||||
animation-timing-function: steps(12);
|
||||
animation-iteration-count: infinite;
|
||||
animation-direction: alternate;
|
||||
}
|
||||
|
||||
#power-profiles-daemon {
|
||||
padding-right: 15px;
|
||||
}
|
||||
|
||||
/*0b also looked good though. */
|
||||
#power-profiles-daemon.performance {
|
||||
background-color: #${palette.base04};
|
||||
color: #${palette.base00};
|
||||
}
|
||||
|
||||
#power-profiles-daemon.balanced {
|
||||
background-color: #${palette.base04};
|
||||
color: #${palette.base00};
|
||||
}
|
||||
|
||||
#power-profiles-daemon.power-saver {
|
||||
background-color: #${palette.base04};
|
||||
color: #${palette.base00};
|
||||
}
|
||||
|
||||
label:focus {
|
||||
background-color: #${palette.base04};
|
||||
color: #${palette.base00};
|
||||
}
|
||||
|
||||
#cpu {
|
||||
background-color: #${palette.base04};
|
||||
color: #${palette.base00};
|
||||
}
|
||||
|
||||
#memory {
|
||||
background-color: #${palette.base04};
|
||||
color: #${palette.base00};
|
||||
}
|
||||
|
||||
#disk {
|
||||
background-color: #${palette.base04};
|
||||
color: #${palette.base00};
|
||||
}
|
||||
|
||||
#backlight {
|
||||
background-color: #${palette.base04};
|
||||
color: #${palette.base00};
|
||||
}
|
||||
|
||||
#network {
|
||||
background-color: #${palette.base04};
|
||||
color: #${palette.base00};
|
||||
}
|
||||
|
||||
#network.disconnected {
|
||||
background-color: #${palette.base0E};
|
||||
color: #${palette.base00};
|
||||
}
|
||||
|
||||
#pulseaudio {
|
||||
background-color: #${palette.base0A};
|
||||
color: #${palette.base00};
|
||||
}
|
||||
|
||||
#pulseaudio.muted {
|
||||
background-color: #${palette.base0E};
|
||||
color: #${palette.base03};
|
||||
}
|
||||
|
||||
#wireplumber {
|
||||
background-color: #${palette.base07};
|
||||
color: #${palette.base00};
|
||||
}
|
||||
|
||||
#wireplumber.muted {
|
||||
background-color: #${palette.base0E};
|
||||
color: #${palette.base00};
|
||||
}
|
||||
|
||||
#custom-media {
|
||||
background-color: #${palette.base04};
|
||||
color: #${palette.base00};
|
||||
min-width: 100px;
|
||||
}
|
||||
|
||||
#custom-media.custom-spotify {
|
||||
background-color: #${palette.base04};
|
||||
color: #${palette.base00};
|
||||
}
|
||||
|
||||
#custom-media.custom-vlc {
|
||||
background-color: #${palette.base04};
|
||||
color: #${palette.base00};
|
||||
}
|
||||
|
||||
#temperature {
|
||||
background-color: #${palette.base04};
|
||||
color: #${palette.base00};
|
||||
}
|
||||
|
||||
#temperature.critical {
|
||||
background-color: #${palette.base0E};
|
||||
color: #${palette.base00};
|
||||
}
|
||||
|
||||
#tray {
|
||||
background-color: #${palette.base04};
|
||||
color: #${palette.base00};
|
||||
}
|
||||
|
||||
#tray > .passive {
|
||||
-gtk-icon-effect: dim;
|
||||
}
|
||||
|
||||
#tray > .needs-attention {
|
||||
-gtk-icon-effect: highlight;
|
||||
background-color: #${palette.base07};
|
||||
color: #${palette.base00};
|
||||
}
|
||||
|
||||
#idle_inhibitor {
|
||||
background-color: #${palette.base04};
|
||||
color: #${palette.base00};
|
||||
}
|
||||
|
||||
#idle_inhibitor.activated {
|
||||
background-color: #${palette.base06};
|
||||
color: #${palette.base00};
|
||||
}
|
||||
|
||||
#mpd {
|
||||
background-color: #${palette.base04};
|
||||
color: #${palette.base00};
|
||||
}
|
||||
|
||||
#mpd.disconnected {
|
||||
background-color: #${palette.base06};
|
||||
color: #${palette.base00};
|
||||
}
|
||||
|
||||
#mpd.stopped {
|
||||
background-color: #${palette.base0C};
|
||||
}
|
||||
|
||||
#mpd.paused {
|
||||
background-color: #${palette.base0B};
|
||||
}
|
||||
|
||||
#language {
|
||||
background: #${palette.base04};
|
||||
color: #${palette.base00};
|
||||
padding: 0 5px;
|
||||
margin: 0 5px;
|
||||
min-width: 16px;
|
||||
}
|
||||
|
||||
#keyboard-state {
|
||||
background: #${palette.base04};
|
||||
color: #${palette.base00};
|
||||
padding: 0 0px;
|
||||
margin: 0 5px;
|
||||
min-width: 16px;
|
||||
}
|
||||
|
||||
#keyboard-state > label {
|
||||
padding: 0 5px;
|
||||
}
|
||||
|
||||
#keyboard-state > label.locked {
|
||||
background: #${palette.base04};
|
||||
color: #${palette.base00};
|
||||
}
|
||||
|
||||
#scratchpad {
|
||||
background: #${palette.base00};
|
||||
color: #${palette.base00};
|
||||
}
|
||||
|
||||
#scratchpad.empty {
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
#privacy {
|
||||
padding: 0;
|
||||
color: #${palette.base04};
|
||||
}
|
||||
|
||||
#privacy-item {
|
||||
color: #${palette.base00};
|
||||
padding: 0 5px;
|
||||
}
|
||||
|
||||
#privacy-item.screenshare {
|
||||
background-color: #${palette.base00};
|
||||
}
|
||||
|
||||
#privacy-item.audio-in {
|
||||
background-color: #${palette.base0B};
|
||||
}
|
||||
|
||||
#privacy-item.audio-out {
|
||||
background-color: #${palette.base0D};
|
||||
}
|
||||
|
||||
'';
|
||||
/* Battery critical blink */
|
||||
@keyframes blink {
|
||||
to {
|
||||
background: ${toRGBA palette.base05 "0.9"};
|
||||
color: ${toRGBA palette.base00 "1"};
|
||||
}
|
||||
}
|
||||
#battery.critical:not(.charging) {
|
||||
animation: blink 0.5s steps(12) infinite alternate;
|
||||
}
|
||||
'';
|
||||
|
||||
# Keep Waybar alive in your user session
|
||||
systemd.enable = true;
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
69
home/gunalx/wlogout.nix
Normal file
@@ -0,0 +1,69 @@
|
||||
{ pkgs
|
||||
, lib
|
||||
, inputs
|
||||
, config
|
||||
, nix-colors
|
||||
, ...
|
||||
}:
|
||||
|
||||
let
|
||||
# Grab your palette and the hex→RGBA helper
|
||||
palette = config.colorscheme.palette;
|
||||
toRGBA = color: alpha:
|
||||
let rgb = nix-colors.lib.conversions.hexToRGBString "," (lib.removePrefix "#" color);
|
||||
in "rgba(${rgb},${alpha})";
|
||||
|
||||
# Path to the wleave-provided icons
|
||||
iconsDir = "${pkgs.wleave}/share/wleave/icons";
|
||||
in
|
||||
|
||||
{
|
||||
programs.wlogout = {
|
||||
enable = true;
|
||||
package = pkgs.wleave;
|
||||
|
||||
# Your button layout
|
||||
layout = [
|
||||
{ label = "lock"; action = "swaylock"; text = "Lock"; keybind = "l"; }
|
||||
{ label = "hibernate"; action = "systemctl hibernate"; text = "Hibernate"; keybind = "h"; }
|
||||
{ label = "logout"; action = "loginctl terminate-user $USER"; text = "Logout"; keybind = "e"; }
|
||||
{ label = "shutdown"; action = "systemctl poweroff"; text = "Shutdown"; keybind = "s"; }
|
||||
{ label = "suspend"; action = "systemctl suspend"; text = "Suspend"; keybind = "u"; }
|
||||
{ label = "reboot"; action = "systemctl reboot"; text = "Reboot"; keybind = "r"; }
|
||||
];
|
||||
|
||||
style = ''
|
||||
* { background-image: none; }
|
||||
|
||||
window {
|
||||
background-color: ${toRGBA palette.base00 "0.7"};
|
||||
}
|
||||
|
||||
button {
|
||||
color: #${palette.base0C};
|
||||
background-color: ${toRGBA palette.base02 "0.8"};
|
||||
border: 2px solid #${palette.base0C};
|
||||
border-radius: 1em;
|
||||
margin: 0.75em;
|
||||
background-repeat: no-repeat;
|
||||
background-position: center;
|
||||
box-shadow: 0 0 4px #${palette.base0C};
|
||||
padding: 0.6em 1.2em;
|
||||
}
|
||||
|
||||
button:focus,
|
||||
button:active {
|
||||
background-color: ${toRGBA palette.base03 "0.9"};
|
||||
box-shadow: 0 0 6px #${palette.base0C};
|
||||
outline: none;
|
||||
}
|
||||
|
||||
#lock { background-image: image(url("${iconsDir}/lock.svg")); }
|
||||
#logout { background-image: image(url("${iconsDir}/logout.svg")); }
|
||||
#suspend { background-image: image(url("${iconsDir}/suspend.svg")); }
|
||||
#hibernate { background-image: image(url("${iconsDir}/hibernate.svg")); }
|
||||
#shutdown { background-image: image(url("${iconsDir}/shutdown.svg")); }
|
||||
#reboot { background-image: image(url("${iconsDir}/reboot.svg")); }
|
||||
'';
|
||||
};
|
||||
}
|
||||
@@ -2,7 +2,7 @@
|
||||
{
|
||||
imports = [
|
||||
../common/sshconfig.nix
|
||||
../common/unfree.nix
|
||||
../common/nix.nix
|
||||
../common/atuin.nix
|
||||
];
|
||||
|
||||
|
||||
@@ -168,23 +168,17 @@ imports =
|
||||
};
|
||||
|
||||
buildMachines = [
|
||||
# { hostName = "bob.pvv.ntnu.no";
|
||||
# system = "x86_64-linux";
|
||||
# maxJobs = 12;
|
||||
# supportedFeatures = [ "big-parallel" ];
|
||||
# speedFactor = 129270;
|
||||
# }
|
||||
# { hostName = "bolle.pbsds.net";
|
||||
# system = "x86_64-linux";
|
||||
# maxJobs = 6;
|
||||
# speedFactor = 12857;
|
||||
# }
|
||||
# { hostName = "garp.pbsds.net";
|
||||
# system = "x86_64-linux";
|
||||
# maxJobs = 4;
|
||||
# # i7-6700
|
||||
# speedFactor = 8088;
|
||||
# }
|
||||
{ hostName = "bolle.pbsds.net";
|
||||
system = "x86_64-linux";
|
||||
maxJobs = 6;
|
||||
speedFactor = 12857;
|
||||
}
|
||||
{ hostName = "garp.pbsds.net";
|
||||
system = "x86_64-linux";
|
||||
maxJobs = 4;
|
||||
# i7-6700
|
||||
speedFactor = 8088;
|
||||
}
|
||||
{ hostName = "localhost";
|
||||
system = "x86_64-linux";
|
||||
maxJobs = 4;
|
||||
|
||||
@@ -54,26 +54,16 @@ imports =
|
||||
#security.pam.services.display-manager.ly = {};
|
||||
services.displayManager = {
|
||||
enable = true;
|
||||
sessionPackages = with pkgs; [ sway ];
|
||||
sessionPackages = with pkgs; [ sway niri];
|
||||
|
||||
sddm = {
|
||||
enable = true;
|
||||
autoNumlock = true;
|
||||
};
|
||||
|
||||
### still really broken and neds 24.11
|
||||
#ly = {
|
||||
# package = pkgs.unstable.ly;
|
||||
# enable = true;
|
||||
# settings = {
|
||||
# animation = "matrix";
|
||||
# waylandsessions = "${config.services.displayManager.sessionData.desktops}/share/wayland-sessions";
|
||||
# };
|
||||
|
||||
#};
|
||||
|
||||
};
|
||||
|
||||
services.power-profiles-daemon.enable = true;
|
||||
|
||||
services.logind.powerKey = "ignore";
|
||||
|
||||
|
||||