This commit is contained in:
Lucy Hochkamp 2024-11-28 23:40:16 +01:00
parent 9c9a3fe8ad
commit 86953ea925
17 changed files with 1110 additions and 606 deletions

View file

@ -45,8 +45,8 @@
(deflayer colemak-dh
esc f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
grv 1 2 3 4 5 6 7 8 9 0 - = bspc
tab (tap-hold-next-release 200 q @num) w f p b j l u y (tap-hold-next-release 200 ; @num) [ ]
esc (tap-hold-next-release 200 a lctrl) (tap-hold-next-release 200 r ralt) (tap-hold-next-release 200 s lmet) t g m n (tap-hold-next-release 200 e rmet) (tap-hold-next-release 200 i lalt) (tap-hold-next-release 200 o rctrl) ' \\ ret
tab (tap-hold-next-release 200 :grace 15 q @num) w f p b j l u y (tap-hold-next-release 200 :grace 15 ; @num) [ ]
esc (tap-hold-next-release 200 :grace 15 a lctrl) (tap-hold-next-release 200 :grace 15 r ralt) (tap-hold-next-release 200 :grace 15 s lmet) t g m n (tap-hold-next-release 200 :grace 15 e rmet) (tap-hold-next-release 200 :grace 15 i lalt) (tap-hold-next-release 200 :grace 15 o rctrl) ' \\ ret
lsft z x c d v 102d k h , . / rsft
lctl lmet lalt spc ralt rmet _ _
)

View file

@ -18,7 +18,19 @@
programs.fuse.userAllowOther = true;
programs.sway.enable = true;
programs.nix-ld.enable = true;
programs.gamescope.enable = true;
services.gnome.sushi.enable = true;
services.gnome.gnome-settings-daemon.enable = true;
services.gvfs.enable = true;
services.logind.extraConfig = ''
# supspend on pw button press
HandlePowerKey=suspend
'';
programs.kdeconnect.enable = true;
services.power-profiles-daemon.enable = true;
services.printing.enable = true;
services.printing.drivers = with pkgs; [ gutenprint hplip splix ];
services.avahi.enable = true;
programs.sway.extraSessionCommands = ''
export NIXOS_OZONE_WL=1
'';
@ -26,6 +38,7 @@
wlr.enable = true;
enable = true;
extraPortals = [ pkgs.xdg-desktop-portal-gtk ];
configPackages = [ pkgs.xdg-desktop-portal-gtk ];
};
# start bt
hardware.bluetooth.enable = true;
@ -35,23 +48,39 @@
programs.light.enable = true;
networking.networkmanager.enable = true;
networking.networkmanager.wifi.backend = "iwd";
services.displayManager.sddm.enable = true;
services.displayManager.sddm.wayland.enable = true;
# services.displayManager.defaultSession = "river";
services.xserver.displayManager.gdm.enable = true;
services.xserver.enable = true;
services.xserver.displayManager.gdm.wayland = true;
programs.seahorse.enable = true;
services.gnome.gnome-keyring.enable = true;
services.gnome.gnome-online-accounts.enable = true;
services.gnome.core-utilities.enable = true;
services.displayManager.defaultSession = "river";
programs.river.enable = true;
services.upower.enable = true;
users.users.ragon.extraGroups = [ "networkmanager" "video" ];
programs.kde-pim = { enable = true; kmail = true; kontact = true; merkuro = true; };
environment.systemPackages = [
pkgs.qt6.qtwayland
];
fonts.packages = [
pkgs.nerdfonts
fonts.packages = with pkgs; [
nerdfonts
cantarell-fonts
dejavu_fonts
source-code-pro # Default monospace font in 3.32
source-sans
];
services.pipewire = {
enable = true;
pulse.enable = true;
};
services.fwupd.enable = true;
programs.ssh.startAgent = true;
programs.evolution.enable = true;
services.gnome.evolution-data-server.enable = true;
services.flatpak.enable = true;
programs.steam = {
enable = true;
remotePlay.openFirewall = true; # Open ports in the firewall for Steam Remote Play
@ -68,22 +97,26 @@
./swaycfg.nix
./work.nix
./river.nix
./kanshi.nix
../../hm-modules/files.nix
inputs.wired.homeManagerModules.default
];
ragon.helix.enable = true;
ragon.nushell.enable = true;
ragon.nushell.isNixOS = true;
ragon.zellij.enable = true;
services.gnome-keyring.enable = true;
home.file.".config/wezterm/wezterm.lua".text = ''
local wezterm = require 'wezterm'
-- This will hold the configuration.
local config = wezterm.config_builder()
config.default_prog = { 'zellij', 'attach', '-c' }
config.default_prog = { 'nu' }
config.hide_tab_bar_if_only_one_tab = true
config.max_fps = 144
config.font = wezterm.font 'Source Code Pro'
-- This is where you actually apply your config choices
@ -95,15 +128,41 @@
'';
home.packages = with pkgs; [
wezterm
inputs.wezterm.packages.${pkgs.system}.default
element-desktop # this is not a place of honor
discord # shitcord
unstable.signal-desktop
plexamp
unstable.feishin
unstable.plexamp
firefox
gnome.seahorse
obsidian
thunderbird
orca-slicer
diebahn
vlc
dolphin
# unstable.kicad
unstable.devenv
lutris
libsecret
mixxx
unstable.harsh
broot
];
home.file.".zshrc".text = lib.mkForce ''
exec nu
'';
programs.nushell.extraConfig = ''
harsh l
'';
services.kdeconnect = {
enable = true;
indicator = true;
package = pkgs.kdePackages.kdeconnect-kde;
};
@ -131,11 +190,35 @@
# };
programs.home-manager.enable = true;
home.stateVersion = "24.05";
programs.borgmatic = {
enable = true;
backups.system = {
location.sourceDirectories = [ "/persistent" ];
location.repositories = [{ path = "ssh://ragon@ds9//backups/theseus"; }];
location.extraConfig.exclude_if_present = [ ".nobackup" ];
storage.encryptionPasscommand = "${pkgs.libsecret}/bin/secret-tool lookup borg-repository system";
location.extraConfig.before_backup = [ "notify-send -u low -a borgmatic borgmatic \"starting backup\" -t 10000" ];
location.extraConfig.after_backup = [ "notify-send -u low -a borgmatic borgmatic \"finished backup\" -t 10000" ];
location.extraConfig.on_error = [ "notify-send -u critical -a borgmatic borgmatic \"backup failed\"" ];
location.extraConfig.ssh_command = "ssh -i /home/ragon/.ssh/id_ed25519";
retention = {
keepHourly = 24;
keepDaily = 7;
keepWeekly = 4;
keepMonthly = 12;
keepYearly = 2;
};
};
};
services.borgmatic.enable = true;
};
ragon = {
user.enable = true;
persist.enable = true;
persist.extraDirectories = [
"/var/lib/bluetooth"
];
services = {
ssh.enable = true;
tailscale.enable = true;

View file

@ -1,55 +0,0 @@
{ pkgs, inputs, options, lib, ... }:
let
# TODO: have a list of workspaces and operate on that
moveWs = output: workspaceStart: workspaceEnd: map
(x: ''${pkgs.sway}/bin/swaymsg workspace ${toString x}:${toString x} ouptut "${output}", workspace ${toString x}:${toString x}, move workspace to "${output}"'')
(lib.range workspaceStart workspaceEnd);
in
{
services.kanshi = {
enable = true;
settings = [
{
profile.name = "undocked";
profile.outputs = [
{
criteria = "eDP-1";
adaptiveSync = true;
scale = 1.5;
mode = "2880x1920@120Hz";
}
];
}
{
profile.name = "docked_home";
profile.outputs = [
{
criteria = "eDP-1";
adaptiveSync = true;
scale = 2.0;
mode = "2880x1920@120Hz";
}
{
criteria = "Dell Inc. Dell S2716DG #ASM2LrMXJiXd";
adaptiveSync = true;
position = "1440,0";
scale = 1.0;
mode = "2560x1440@119.998Hz";
}
{
criteria = "Acer Technologies KG271U TATEE0018511";
adaptiveSync = true;
position = "4000,0";
scale = 1.0;
mode = "2560x1440@74.924Hz";
}
];
profile.exec = lib.flatten [
(moveWs "eDP-1" 1 3)
(moveWs "Dell Inc. Dell S2716DG #ASM2LrMXJiXd" 4 7)
(moveWs "Acer Technologies KG271U TATEE0018511" 8 10)
];
}
];
};
}

View file

@ -1,12 +1,17 @@
{ pkgs, lib, ... }: {
services.kmonad = {
enable = true;
keyboards = {
builtin= {
device = "/dev/input/by-path/platform-i8042-serio-0-event-kbd";
config = builtins.readFile ./builtin.kbd;
};
};
};
enable = true;
keyboards = {
builtin = {
device = "/dev/input/by-path/platform-i8042-serio-0-event-kbd";
config = builtins.readFile ./builtin.kbd;
};
razerbuero = {
device = "/dev/input/by-id/usb-Razer_Razer_BlackWidow_Tournament_Edition_Chroma-event-kbd";
config = builtins.readFile ./razer.kbd;
};
};
};
}

89
hosts/theseus/razer.kbd Normal file
View file

@ -0,0 +1,89 @@
(defcfg
;; ** For Linux **
input (device-file "/dev/input/by-id/usb-Razer_Razer_BlackWidow_Tournament_Edition_Chroma-event-kbd")
;; input (device-file "/dev/input/by-path/platform-i8042-serio-0-event-kbd")
output (uinput-sink "KMonad output razer")
;; ** For Windows **
;; input (low-level-hook)
;; output (send-event-sink)
;; ** For MacOS **
;; input (iokit-name "my-keyboard-product-string")
;; output (kext)
fallthrough true
)
(defsrc
esc f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
grv 1 2 3 4 5 6 7 8 9 0 - = bspc
tab q w e r t y u i o p [ ]
caps a s d f g h j k l ; ' \ ret
lsft 102d z x c v b n m , . / rsft
lctl lmet lalt spc ralt rmet cmp rctl
)
(defalias
ext (layer-toggle extend) ;; Bind 'ext' to the Extend Layer
)
(defalias
cpy C-c
pst C-v
cut C-x
udo C-z
all C-a
fnd C-f
bk Back
fw Forward
)
(defalias
num (layer-toggle num)
)
(deflayer colemak-dh
esc f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
grv 1 2 3 4 5 6 7 8 9 0 - = bspc
tab (tap-hold-next-release 200 q @num) w f p b j l u y (tap-hold-next-release 200 ; @num) [ ]
esc (tap-hold-next-release 200 a lctrl) (tap-hold-next-release 200 r ralt) (tap-hold-next-release 200 s lmet) t g m n (tap-hold-next-release 200 e rmet) (tap-hold-next-release 200 i lalt) (tap-hold-next-release 200 o rctrl) ' \\ ret
lsft z x c d v 102d k h , . / rsft
lctl lmet lalt spc ralt rmet _ _
)
(deflayer num
esc f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
grv 1 2 3 4 5 6 7 8 9 0 - = bspc
tab q w f p b j l u y ; [ ]
esc 1 2 3 4 5 6 7 8 9 0 ' \\ ret
lsft z x c d v 102d k h , . / rsft
lctl lmet lalt spc ralt rmet _ _
)
(deflayer colemak-dhk
esc f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
grv 1 2 3 4 5 6 7 8 9 0 - = bspc
tab q w f p b j l u y ; [ ]
@ext a r s t g k n e i o ' \\ ret
lsft z x c d v 102d m h , . / rsft
lctl lmet lalt spc ralt rmet _ _
)
(deflayer extend
_ play rewind previoussong nextsong ejectcd refresh brdn brup www mail prog1 prog2
_ f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12 _
_ esc @bk @fnd @fw ins pgup home up end menu prnt slck
_ lalt lmet lsft lctl ralt pgdn lft down rght del caps _ _
_ @udo @cut @cpy tab @pst _ pgdn bks lsft lctl comp _
_ _ _ ret _ _ _ _
)
(deflayer empty
_ _ _ _ _ _ _ _ _ _ _ _ _
_ _ _ _ _ _ _ _ _ _ _ _ _ _
_ _ _ _ _ _ _ _ _ _ _ _ _
_ _ _ _ _ _ _ _ _ _ _ _ _ _
_ _ _ _ _ _ _ _ _ _ _ _ _
_ _ _ _ _ _ _ _
)

View file

@ -1,16 +1,29 @@
{ lib, pkgs, config, inputs, ... }: {
{ lib, pkgs, config, inputs, ... }:
let
# backgroundImage = builtins.fetchurl {
# url = "https://gruvbox-wallpapers.pages.dev/wallpapers/anime/wallhaven-2e2xyx.jpg";
# sha256 = "1zw1a8x20bp9mn9lx18mxzgzvzi02ss57r4q1lc9f14fsmzphnlq";
# };
backgroundImage = "/home/ragon/Pictures/background.jpg";
in
{
home.packages = with pkgs; [
kanshi
unstable.shikane
helvum
swaylock
swayidle
swaybg
wlopm
brightnessctl
dconf
pwvucontrol
networkmanagerapplet
libnotify
];
dconf = {
settings = {
"org/gnome/desktop/interface" = {
gtk-theme = "Adwaita-dark";
color-scheme = "prefer-dark";
};
};
@ -19,10 +32,7 @@
gtk = {
enable = true;
gtk4.extraConfig.gtk-application-prefer-dark-theme = 1;
theme = {
name = "Adwaita-dark";
package = pkgs.gnome.gnome-themes-extra;
};
gtk3.extraConfig.gtk-application-prefer-dark-theme = 1;
};
qt = {
@ -307,13 +317,17 @@ label:focus {
layer = "top";
position = "top";
height = 15;
modules-left = [ "river/tags" "river/layout" ];
modules-left = [ "river/tags" "river/layout" "tray"];
modules-center = [ "river/window" ];
modules-right = [ "tray" "wireplumber" "upower" "backlight" "cpu" "temperature" "memory" "disk" "network" "clock" ];
modules-right = [ "wireplumber" "upower" "backlight" "cpu" "temperature" "memory" "disk" "custom/tailscale" "network" "clock" ];
"river/window" = {
max-length = 40;
};
wireplumber = {
"format" = "{volume}% {icon}";
"format-muted" = "";
"on-click" = "${pkgs.pwvucontrol}/bin/pwvucontrol";
"on-right-click" = "${pkgs.wireplumber}/bin/wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle";
"format-icons" = [ "" "" "" ];
};
"backlight" = {
@ -325,7 +339,7 @@ label:focus {
};
"cpu" = {
"interval" = 10;
"format" = "{}% ";
"format" = "{:0.0f}% ";
"max-length" = 10;
};
"temperature" = {
@ -344,6 +358,15 @@ label:focus {
unit = "GB";
path = "/persistent";
};
"custom/tailscale" = {
exec = pkgs.writeScript "tailscaleWaybar.sh" ''
#!${pkgs.bash}/bin/bash
TAILNET=$(${pkgs.tailscale}/bin/tailscale status --json | ${pkgs.jq}/bin/jq -j '.MagicDNSSuffix')
echo "''${''${TAILNET%.ts.net}:(-15)}"
'';
interval = 30;
};
"network" = {
"format" = "{ifname}";
"format-wifi" = "{essid} ({signalStrength}%) ";
@ -364,97 +387,116 @@ label:focus {
xwayland.enable = true;
settings = {
map = {
normal = {
"Super+Shift Space" = "spawn 'rofi -show drun'";
"Super+Shift Return" = "spawn 'wezterm'";
"Super Q" = "close";
"Super J" = "focus-view next";
"Super K" = "focus-view previous";
"Super Up" = "focus-view next";
"Super Down" = "focus-view previous";
"Super+Shift J" = "swap next";
"Super+Shift K" = "swap previous";
"Super+Shift Up" = "swap next";
"Super+Shift Down" = "swap previous";
"Super Period" = "focus-output right";
"Super Comma" = "focus-output left";
"Super+Control Period" = "send-to-output right";
"Super+Control Comma" = "send-to-output left";
"Super Return" = "zoom";
"Super H" = ''send-layout-cmd rivertile "main-ratio -0.05"'';
"Super L" = ''send-layout-cmd rivertile "main-ratio +0.05"'';
"Super Left" = ''send-layout-cmd rivertile "main-ratio -0.05"'';
"Super Right" = ''send-layout-cmd rivertile "main-ratio +0.05"'';
"Super+Shift H" = ''send-layout-cmd rivertile "main-count -1"'';
"Super+Shift L" = ''send-layout-cmd rivertile "main-count +1"'';
"Super+Shift Left" = ''send-layout-cmd rivertile main-count -1"'';
"Super+Shift Right" = ''send-layout-cmd rivertile main-count +1"'';
# Super+Alt+{H,J,K,L} to move views
"Super+Alt H" = "move left 100";
"Super+Alt J" = "move down 100";
"Super+Alt K" = "move up 100";
"Super+Alt L" = "move right 100";
normal =
let
scrn = pkgs.writeScript "scrn.sh" ''
#!${pkgs.bash}/bin/bash
IMG_FILE=~/Images/screenshots/scrn-$(date +\"%Y-%m-%d-%H-%M-%S\").png
${pkgs.grim}/bin/grim $IMG_FILE
${pkgs.wl-clipboard}/bin/wl-copy < $IMG_FILE
${pkgs.libnotify}/bin/notify-send -i $IMG_FILE -e -t 10000 "Screenshot Saved" $IMG_FILE
'';
slurpscrn = pkgs.writeScript "scurpscrn.sh" ''
#!${pkgs.bash}/bin/bash
IMG_FILE=~/Images/screenshots/scrn-$(date +\"%Y-%m-%d-%H-%M-%S\").png
${pkgs.slurp}/bin/slurp | ${pkgs.grim}/bin/grim -g - $IMG_FILE
${pkgs.wl-clipboard}/bin/wl-copy < $IMG_FILE
${pkgs.libnotify}/bin/notify-send -i $IMG_FILE -e -t 10000 "Screenshot Saved" $IMG_FILE
'';
in
{
"Super+Alt 4" = "spawn '${slurpscrn}'";
"Super+Alt 1" = "spawn '${scrn}'";
"Super+Shift Space" = "spawn 'rofi -show drun'";
"Super+Shift Return" = "spawn wezterm";
"Super Q" = "close";
"Super J" = "focus-view next";
"Super K" = "focus-view previous";
"Super Up" = "focus-view next";
"Super Down" = "focus-view previous";
"Super+Shift J" = "swap next";
"Super+Shift K" = "swap previous";
"Super+Shift Up" = "swap next";
"Super+Shift Down" = "swap previous";
"Super Period" = "focus-output right";
"Super Comma" = "focus-output left";
"Super+Control Period" = "send-to-output -current-tags right";
"Super+Control Comma" = "send-to-output -current-tags left";
"Super Return" = "zoom";
"Super H" = ''send-layout-cmd rivertile "main-ratio -0.05"'';
"Super L" = ''send-layout-cmd rivertile "main-ratio +0.05"'';
"Super Left" = ''send-layout-cmd rivertile "main-ratio -0.05"'';
"Super Right" = ''send-layout-cmd rivertile "main-ratio +0.05"'';
"Super+Shift H" = ''send-layout-cmd rivertile "main-count -1"'';
"Super+Shift L" = ''send-layout-cmd rivertile "main-count +1"'';
"Super+Shift Left" = ''send-layout-cmd rivertile main-count -1"'';
"Super+Shift Right" = ''send-layout-cmd rivertile main-count +1"'';
# Super+Alt+{H,J,K,L} to move views
"Super+Alt H" = "move left 100";
"Super+Alt J" = "move down 100";
"Super+Alt K" = "move up 100";
"Super+Alt L" = "move right 100";
# Super+Alt+Control+{H,J,K,L} to snap views to screen edges
"Super+Alt+Control H" = "snap left";
"Super+Alt+Control J" = "snap down";
"Super+Alt+Control K" = "snap up";
"Super+Alt+Control L" = "snap right";
# Super+Alt+Control+{H,J,K,L} to snap views to screen edges
"Super+Alt+Control H" = "snap left";
"Super+Alt+Control J" = "snap down";
"Super+Alt+Control K" = "snap up";
"Super+Alt+Control L" = "snap right";
# Super+Alt+Shift+{H,J,K,L} to resize views
"Super+Alt+Shift H" = "resize horizontal -100";
"Super+Alt+Shift J" = "resize vertical 100";
"Super+Alt+Shift K" = "resize vertical -100";
"Super+Alt+Shift L" = "resize horizontal 100";
# Super+Alt+Shift+{H,J,K,L} to resize views
"Super+Alt+Shift H" = "resize horizontal -100";
"Super+Alt+Shift J" = "resize vertical 100";
"Super+Alt+Shift K" = "resize vertical -100";
"Super+Alt+Shift L" = "resize horizontal 100";
} // (lib.zipAttrs (map
(x_int:
let
pow = n: i:
if i == 1 then n
else if i == 0 then 1
else n * pow n (i - 1);
tags = toString (pow 2 (x_int - 1));
x = toString x_int;
} // (lib.zipAttrs (map
(x_int:
let
pow = n: i:
if i == 1 then n
else if i == 0 then 1
else n * pow n (i - 1);
tags = toString (pow 2 (x_int - 1));
x = toString x_int;
in
{
"Super ${x}" = "set-focused-tags ${tags}";
"Super+Shift ${x}" = "set-view-tags ${tags}";
"Super+Control ${x}" = "toggle-focused-tags ${tags}";
"Super+Shift+Control ${x}" = "toggle-view-tags ${tags}";
}
)
(lib.range 1 9)))
// {
"Super 0" = "set-focused-tags 4294967295"; # $(((1 << 32) - 1))
"Super+Shift 0" = "set-view-tags 4294967295"; # $(((1 << 32) - 1))
# Super+Space to toggle float
"Super Space" = "toggle-float";
in
{
"Super ${x}" = "set-focused-tags ${tags}";
"Super+Shift ${x}" = "set-view-tags ${tags}";
"Super+Control ${x}" = "toggle-focused-tags ${tags}";
"Super+Shift+Control ${x}" = "toggle-view-tags ${tags}";
}
)
(lib.range 1 9)))
// {
"Super 0" = "set-focused-tags 4294967295"; # $(((1 << 32) - 1))
"Super+Shift 0" = "set-view-tags 4294967295"; # $(((1 << 32) - 1))
# Super+Space to toggle float
"Super Space" = "toggle-float";
# Super+F to toggle fullscreen
"Super F" = "toggle-fullscreen";
# Super+F to toggle fullscreen
"Super F" = "toggle-fullscreen";
# Super+{Up,Right,Down,Left} to change layout orientation
"Super Up" = ''send-layout-cmd rivertile "main-location top"'';
"Super Right" = ''send-layout-cmd rivertile "main-location right"'';
"Super Down" = ''send-layout-cmd rivertile "main-location bottom"'';
"Super Left" = ''send-layout-cmd rivertile "main-location left"'';
# Control pulse audio volume with pamixer (https://github.com/cdemoulins/pamixer)
"None XF86AudioRaiseVolume" = "spawn 'pamixer -i 5'";
"None XF86AudioLowerVolume" = "spawn 'pamixer -d 5'";
"None XF86AudioMute" = "spawn 'pamixer --toggle-mute'";
# Super+{Up,Right,Down,Left} to change layout orientation
"Super Up" = ''send-layout-cmd rivertile "main-location top"'';
"Super Right" = ''send-layout-cmd rivertile "main-location right"'';
"Super Down" = ''send-layout-cmd rivertile "main-location bottom"'';
"Super Left" = ''send-layout-cmd rivertile "main-location left"'';
# Control pulse audio volume with pamixer (https://github.com/cdemoulins/pamixer)
"None XF86AudioRaiseVolume" = "spawn 'pamixer -i 5'";
"None XF86AudioLowerVolume" = "spawn 'pamixer -d 5'";
"None XF86AudioMute" = "spawn 'pamixer --toggle-mute'";
# Control MPRIS aware media players with playerctl (https://github.com/altdesktop/playerctl)
"None XF86AudioMedia" = "spawn 'playerctl play-pause'";
"None XF86AudioPlay" = "spawn 'playerctl play-pause'";
"None XF86AudioPrev" = "spawn 'playerctl previous'";
"None XF86AudioNext" = "spawn 'playerctl next'";
# Control MPRIS aware media players with playerctl (https://github.com/altdesktop/playerctl)
"None XF86AudioMedia" = "spawn 'playerctl play-pause'";
"None XF86AudioPlay" = "spawn 'playerctl play-pause'";
"None XF86AudioPrev" = "spawn 'playerctl previous'";
"None XF86AudioNext" = "spawn 'playerctl next'";
# Control screen backlight brightness with brightnessctl (https://github.com/Hummer12007/brightnessctl)
"None XF86MonBrightnessUp" = "spawn 'brightnessctl set +5%'";
"None XF86MonBrightnessDown" = "spawn 'brightnessctl set 5%-'";
}
# Control screen backlight brightness with brightnessctl (https://github.com/Hummer12007/brightnessctl)
"None XF86MonBrightnessUp" = "spawn 'brightnessctl set +5%'";
"None XF86MonBrightnessDown" = "spawn 'brightnessctl set 5%-'";
}
;
};
map-pointer.normal = {
@ -473,15 +515,23 @@ label:focus {
input = {
"pointer-2362-628-PIXA3854:00_093A:0274_Touchpad" = "tap enabled";
};
keyboard-layout = "eu";
xcursor-theme = "Adwaita";
default-layout = "rivertile";
};
extraConfig = ''
rivertile -view-padding 3 -outer-padding 3 &
swayidle \
timeout 300 'exec swaylock -c 000000' \
before-sleep 'exec swaylock -c 000000' &
kanshi &
timeout 300 'swaylock -i ${backgroundImage}' \
timeout 600 'wlopm --off \*' resume 'wlopm --on \*' \
before-sleep 'swaylock -i ${backgroundImage}' &
swaybg -i ${backgroundImage} &
shikane &
nm-applet &
'';
};
services.wired = {
enable = true;
config = ./wired.ron;
};
}

View file

@ -1,119 +1,119 @@
{ pkgs, config, inputs, ... }: {
imports = [ inputs.ironbar.homeManagerModules.default ];
# imports = [ inputs.ironbar.homeManagerModules.default ];
home.packages = with pkgs; [
slurp
grim
mako
# mako
firefox
# light installed via programs.light
playerctl
jq
rofi
inputs.swaymonad.defaultPackage.x86_64-linux
# inputs.swaymonad.defaultPackage.x86_64-linux
swaylock
];
programs.ironbar = {
enable = true;
style = ''
@define-color color_bg #282828;
@define-color color_bg_dark #3c3836;
@define-color color_border #665c54;
@define-color color_border_active #7c6f64;
@define-color color_text #ebdbb2;
@define-color color_urgent #cc241d;
* {
font-family: Source Sans Pro Nerd Font, sans-serif;
font-size: 15px;
border: none;
border-radius: 0;
}
# programs.ironbar = {
# enable = false;
# style = ''
# @define-color color_bg #282828;
# @define-color color_bg_dark #3c3836;
# @define-color color_border #665c54;
# @define-color color_border_active #7c6f64;
# @define-color color_text #ebdbb2;
# @define-color color_urgent #cc241d;
# * {
# font-family: Source Sans Pro Nerd Font, sans-serif;
# font-size: 15px;
# border: none;
# border-radius: 0;
# }
box, menubar, button {
background-color: @color_bg;
background-image: none;
box-shadow: none;
}
# box, menubar, button {
# background-color: @color_bg;
# background-image: none;
# box-shadow: none;
# }
button, label {
color: @color_text;
}
# button, label {
# color: @color_text;
# }
button:hover {
background-color: @color_bg_dark;
}
# button:hover {
# background-color: @color_bg_dark;
# }
scale trough {
min-width: 1px;
min-height: 2px;
}
# scale trough {
# min-width: 1px;
# min-height: 2px;
# }
/* #bar {
border-top: 1px solid @color_border;
} */
# /* #bar {
# border-top: 1px solid @color_border;
# } */
.popup {
border: 1px solid @color_border;
padding: 1em;
}
'';
config = {
position = "top";
height = 20;
start = [
{ type = "workspaces"; }
{ type = "sway_mode"; }
];
center = [
{
type = "focused";
show_icon = true;
show_title = true;
icon_size = 10;
truncate = "end";
}
];
end = [
{ type = "music"; player_name = "mpris"; }
{
type = "volume";
icons = {
volume_high = "󰕾";
volume_medium = "󰖀";
volume_low = "󰕿";
muted = "󰝟";
};
format = "{icon} {percentage}%";
max_volume = 100;
}
{
type = "upower";
format = "{icon} {percentage}%";
}
{
type = "sys_info";
format = [
" {cpu_percent}%"
" {temp_c:k10temp-Tctl}°C"
" {memory_used}/{memory_total}GB"
"󰋊 {disk_used:/persistent}/{disk_total:/persistent}GB"
"󰓢 {net_down:wlan0}/{net_up:wlan0} Mbps"
# "󰖡 {load_average:1} | {load_average:5} | {load_average:15}"
];
interval = {
"cpu" = 1;
"disks" = 300;
"memory" = 30;
"networks" = 3;
"temps" = 5;
};
}
{
type = "clock";
format = "%Y-%m-%dT%H:%M:%S%z";
}
];
};
};
# .popup {
# border: 1px solid @color_border;
# padding: 1em;
# }
# '';
# config = {
# position = "top";
# height = 20;
# start = [
# { type = "workspaces"; }
# { type = "sway_mode"; }
# ];
# center = [
# {
# type = "focused";
# show_icon = true;
# show_title = true;
# icon_size = 10;
# truncate = "end";
# }
# ];
# end = [
# { type = "music"; player_name = "mpris"; }
# {
# type = "volume";
# icons = {
# volume_high = "󰕾";
# volume_medium = "󰖀";
# volume_low = "󰕿";
# muted = "󰝟";
# };
# format = "{icon} {percentage}%";
# max_volume = 100;
# }
# {
# type = "upower";
# format = "{icon} {percentage}%";
# }
# {
# type = "sys_info";
# format = [
# " {cpu_percent}%"
# " {temp_c:k10temp-Tctl}°C"
# " {memory_used}/{memory_total}GB"
# "󰋊 {disk_used:/persistent}/{disk_total:/persistent}GB"
# "󰓢 {net_down:wlan0}/{net_up:wlan0} Mbps"
# # "󰖡 {load_average:1} | {load_average:5} | {load_average:15}"
# ];
# interval = {
# "cpu" = 1;
# "disks" = 300;
# "memory" = 30;
# "networks" = 3;
# "temps" = 5;
# };
# }
# {
# type = "clock";
# format = "%Y-%m-%dT%H:%M:%S%z";
# }
# ];
# };
# };
# TODO: change to home-manager module somehow
home.file.".config/sway/config".text = ''
@ -239,7 +239,7 @@
}
bindsym $mod+Shift+e mode "$mode_system"
exec_always "pkill -f 'python3? .+/swaymonad.py'; swaymonad"
# exec_always "pkill -f 'python3? .+/swaymonad.py'; swaymonad"
bindsym $mod+Return nop promote_window
bindsym $mod+j nop focus_next_window

302
hosts/theseus/wired.ron Normal file
View file

@ -0,0 +1,302 @@
(
// Maximum number of notifications to show at any one time.
// A value of 0 means that there is no limit.
max_notifications: 0,
// The default timeout, in miliseconds, for notifications that don't have an initial timeout set.
// 1000ms = 1s.
timeout: 10000,
// How should we handle `expire_timeout` values of zero?
// `UseDefault`: use `timeout`.
// `NeverExpire`: show this notification forever.
// The latter is technically correct according to the notification spec: https://specifications.freedesktop.org/notification-spec/notification-spec-latest.html
zero_timeout_behavior: NeverExpire,
// `poll_interval` decides decides how often (in milliseconds) Wired checks events,
// draws notifications (if necessary) -- the update loop while any notification is present.
// Note that when no notifications are present, Wired polls at `idle_poll_interval` instead.
// 16ms ~= 60hz / 7ms ~= 144hz.
poll_interval: 16,
// The interval at which wired updates when no notifications/windows are present.
//idle_poll_interval: 500,
// Wired will pause notifications if you are idle (no mouse or keyboard input) for longer than
// `idle_threshold` seconds.
// Note that notifications will not be automatically unpaused on wake, and will need to be manually
// cleared, unless `unpause_on_input` is set to true.
// Also note that no distinction is made between manually paused and idle paused notifications.
// If `idle_threshold` is not specified, the behavior will be disabled entirely.
//idle_threshold: 3600,
// Notifications will spawn paused, and have to be manually unpaused or cleared by the user,
// unless `unpause_on_input` is also set.
//notifications_spawn_paused: false,
// Unpause notifications when we receive any input after being idle for longer than 1 second.
// Note that no distinction is made between manually paused notifications and idle paused/spawned notifications.
//unpause_on_input: false,
// Enable/disable replacement functionality.
// If this is disabled, replacement requests will just send a new notification.
// E.g., with replacing_enabled: true, Pidgin will only show the latest message from each contact,
// instead of sending a new one for each message.
// Default: true
//replacing_enabled: true,
// Whether a notification should reset its timeout when it is replaced.
// No effect if replacing_enabled is set to false.
// Default: false
//replacing_resets_timeout: false,
// Some apps/programs close notifications on their own by sending a request to dbus.
// Sometimes this is not desired.
// Default: true
//closing_enabled: true,
// How many notifications are kept in history.
// Each notification is roughly 256 bytes (excluding buffers!), so there's some math to do here.
// Default: 100
//history_length: 100,
// When a `NotificationBlock` has monitorr: -1 (i.e. should follow active monitor), then what input
// should we use to determine the active monitor?
// Options: Mouse, Window
// Default: Mouse
//focus_follows: Mouse,
// Enable printing notification data to a file.
// Useful for scripting purposes.
// The data is written as JSON.
// Default: None
//print_to_file: "/tmp/wired.log",
// Minimum window width and height. This is used to create the base rect that the notification
// grows within.
// The notification window will never be smaller than this.
// A value of 1 means that the window will generally always resize with notification, unless
// you have a 1x1 pixel notification...
// Generally, you shouldn't need to set this.
min_window_width: 325,
//min_window_height: 1,
// Trim whitespace in received notification text, since some clients like to send whitespace, which we usually don't actually want.
//trim_whitespace: true,
// Enable/disable debug rendering.
debug: false,
debug_color: Color(r: 0.0, g: 1.0, b: 0.0, a: 1.0), // Primary color for debug rectangles.
debug_color_alt: Color(r: 1.0, g: 0.0, b: 0.0, a: 1.0), // Secondary color for debug rectangles.
layout_blocks: [
// Layout 1, when an image is present.
(
name: "root",
parent: "",
hook: Hook(parent_anchor: TR, self_anchor: TR),
offset: Vec2(x: -15, y: 15),
//render_criteria: [HintImage],
// https://github.com/Toqozz/wired-notify/wiki/NotificationBlock
params: NotificationBlock((
monitor: 0,
border_width: 2.0,
border_rounding: 0.0,
background_color: Color(hex: "#11111b"),
border_color: Color(hex: "#cba6f7"),
border_color_low: Color(hex: "#89b4fa"),
border_color_critical: Color(hex: "#f38ba8"),
border_color_paused: Color(hex: "#f9e2af"),
gap: Vec2(x: 0.0, y: 10),
notification_hook: Hook(parent_anchor: BR, self_anchor: TR),
)),
),
(
name: "image",
parent: "root",
hook: Hook(parent_anchor: ML, self_anchor: ML),
offset: Vec2(x: 0.0, y: 0.0),
// https://github.com/Toqozz/wired-notify/wiki/ImageBlock
params: ImageBlock((
image_type: HintThenApp,
padding: Padding(left: 13.0, right: 6.0, top: 0.0, bottom: 10.0),
rounding: 3.0,
scale_width: 48,
scale_height: 48,
filter_mode: Lanczos3,
)),
),
(
name: "summary",
parent: "image",
hook: Hook(parent_anchor: MR, self_anchor: BL),
offset: Vec2(x: 0.0, y: 0.0),
// https://github.com/Toqozz/wired-notify/wiki/TextBlock
params: TextBlock((
text: "%s",
font: "JetBrains Mono 11",
color: Color(hex: "#ffffff"),
padding: Padding(left: 12.0, right: 11.0, top: 12.0, bottom: 12.0),
dimensions: (width: (min: 50, max: 250), height: (min: 0, max: 0)),
)),
),
(
name: "body",
parent: "summary",
hook: Hook(parent_anchor: BL, self_anchor: TL),
offset: Vec2(x: 0.0, y: 0.0),
render_criteria: [Body],
// https://github.com/Toqozz/wired-notify/wiki/ScrollingTextBlock
params: ScrollingTextBlock((
text: "%b",
font: "JetBrains Mono 10",
color: Color(hex: "#a6adc8"),
padding: Padding(left: 11.0, right: 11.0, top: 0.0, bottom: 11.0),
width: (min: 150, max: 300),
scroll_speed: 0.1,
lhs_dist: 35.0,
rhs_dist: 35.0,
scroll_t: 1.0,
)),
),
(
name: "progress",
parent: "summary",
hook: Hook(parent_anchor: BL, self_anchor: TL),
offset: Vec2(x: 0.0, y: -3.0),
render_criteria: [Progress],
// https://github.com/Toqozz/wired-notify/wiki/ProgressBlock
params: ProgressBlock((
padding: Padding(left: 12.0, right: 11.0, top: 6.0, bottom: 11.0),
border_width: 2.0,
border_rounding: 5.0,
fill_rounding: 5.0,
border_color: Color(hex: "#313244"),
background_color: Color(hex: "#1e1e2e"),
fill_color: Color(hex: "#cba6f7"),
width: 230,
height: 15,
)),
),
(
name: "button_0",
parent: "summary",
hook: Hook(parent_anchor: BL, self_anchor: TL),
offset: Vec2(x: 12.0, y: 0.0),
render_criteria: [ActionOther(0)],
// https://github.com/Toqozz/wired-notify/wiki/ButtonBlock
params: ButtonBlock((
padding: Padding(left: 8.0, right: 11.0, top: 6.0, bottom: 5.0),
action: OtherAction(0),
text: "%a",
font: "JetBrains Mono 9",
border_width: 2.0,
border_rounding: 0.0,
text_color: Color(hex: "#a6adc8"),
border_color: Color(hex: "#313244"),
background_color: Color(hex: "#1e1e2e"),
dimensions: (width: (min: 0, max: 150), height: (min: 0, max: 0)),
)),
),
(
name: "button_1",
parent: "button_0",
hook: Hook(parent_anchor: TR, self_anchor: TL),
offset: Vec2(x: 12.0, y: 0.0),
render_criteria: [ActionOther(1)],
// https://github.com/Toqozz/wired-notify/wiki/ButtonBlock
params: ButtonBlock((
padding: Padding(left: 8.0, right: 11.0, top: 6.0, bottom: 5.0),
action: OtherAction(1),
text: "%a",
font: "JetBrains Mono 9",
border_width: 2.0,
border_rounding: 0.0,
text_color: Color(hex: "#a6adc8"),
border_color: Color(hex: "#313244"),
background_color: Color(hex: "#1e1e2e"),
dimensions: (width: (min: 0, max: 150), height: (min: 0, max: 0)),
)),
),
(
name: "button_2",
parent: "button_1",
hook: Hook(parent_anchor: TR, self_anchor: TL),
offset: Vec2(x: 12.0, y: 0.0),
render_criteria: [ActionOther(2)],
// https://github.com/Toqozz/wired-notify/wiki/ButtonBlock
params: ButtonBlock((
padding: Padding(left: 8.0, right: 11.0, top: 6.0, bottom: 5.0),
action: OtherAction(2),
text: "%a",
font: "JetBrains Mono 9",
border_width: 2.0,
border_rounding: 0.0,
text_color: Color(hex: "#a6adc8"),
border_color: Color(hex: "#313244"),
background_color: Color(hex: "#1e1e2e"),
dimensions: (width: (min: 0, max: 150), height: (min: 0, max: 0)),
)),
),
(
name: "button_3",
parent: "button_2",
hook: Hook(parent_anchor: TR, self_anchor: TL),
offset: Vec2(x: 12.0, y: 0.0),
render_criteria: [ActionOther(3)],
// https://github.com/Toqozz/wired-notify/wiki/ButtonBlock
params: ButtonBlock((
padding: Padding(left: 8.0, right: 11.0, top: 6.0, bottom: 5.0),
action: OtherAction(3),
text: "%a",
font: "JetBrains Mono 9",
border_width: 2.0,
border_rounding: 0.0,
text_color: Color(hex: "#a6adc8"),
border_color: Color(hex: "#313244"),
background_color: Color(hex: "#1e1e2e"),
dimensions: (width: (min: 0, max: 150), height: (min: 0, max: 0)),
)),
),
(
name: "padding",
parent: "button_0",
hook: Hook(parent_anchor: BR, self_anchor: TL),
offset: Vec2(x: 0.0, y: 0.0),
render_criteria: [ActionOther(0)],
// https://github.com/Toqozz/wired-notify/wiki/ScrollingTextBlock
params: TextBlock((
text: "",
font: "JetBrains Mono 1",
color: Color(hex: "#ffffff"),
padding: Padding(left: 12.0, right: 0.0, top: 12.0, bottom: 0.0),
dimensions: (width: (min: 0, max: 0), height: (min: 0, max: 0)),
)),
),
],
// https://github.com/Toqozz/wired-notify/wiki/Shortcuts
shortcuts: ShortcutsConfig (
notification_interact: 1,
notification_close: 2,
// notification_closeall: 99,
// notification_pause: 99,
notification_action1: 3,
// notification_action2: 99,
// notification_action3: 99,
// notification_action4: 99,
),
)