diff --git a/configs/default.nix b/configs/default.nix index 4fbe8ef..c66045f 100644 --- a/configs/default.nix +++ b/configs/default.nix @@ -223,6 +223,7 @@ in ./htop.nix ./fu-berlin.nix ./i3.nix + ./niri.nix ./i3status-rust.nix ./keyboard.nix ./mycelium.nix diff --git a/configs/fonts.nix b/configs/fonts.nix index 104fc9a..f68e614 100644 --- a/configs/fonts.nix +++ b/configs/fonts.nix @@ -1,5 +1,6 @@ { pkgs, + config, niveumPackages, ... }: let @@ -107,6 +108,7 @@ in { noto-fonts noto-fonts-cjk-sans noto-fonts-emoji + nerd-fonts.blex-mono roboto-slab scheherazade-new source-code-pro @@ -119,10 +121,10 @@ in { zilla-slab ]; # google-fonts league-of-moveable-type fontconfig.defaultFonts = rec { - monospace = ["Noto Sans Mono"] ++ emoji; - serif = ["Noto Serif" "Noto Naskh Arabic" "Noto Serif Devanagari"]; - sansSerif = ["Noto Sans Display" "Noto Naskh Arabic" "Noto Sans Hebrew" "Noto Sans Devanagari" "Noto Sans CJK JP" "Noto Sans Coptic" "Noto Sans Syriac Western"]; - emoji = ["Noto Color Emoji"]; + monospace = [config.stylix.fonts.monospace.name] ++ emoji; + serif = [config.stylix.fonts.serif.name "Scheherazade New" "Ezra SIL" "Antinoou" "Noto Serif Devanagari"]; + sansSerif = [config.stylix.fonts.sansSerif.name "Noto Sans Display" "Noto Naskh Arabic" "Noto Sans Hebrew" "Noto Sans Devanagari" "Noto Sans CJK JP" "Noto Sans Coptic" "Noto Sans Syriac Western"]; + emoji = [config.stylix.fonts.emoji.name]; }; # xelatex fails with woff files # ref https://tex.stackexchange.com/questions/392144/xelatex-and-fontspec-crash-trying-to-find-woff-file-for-some-fonts-but-not-other diff --git a/configs/keyboard.nix b/configs/keyboard.nix index 850f546..28c0b67 100644 --- a/configs/keyboard.nix +++ b/configs/keyboard.nix @@ -71,7 +71,16 @@ in { pkgs.writers.writeDashBin "kb-${language}" '' ${pkgs.xorg.setxkbmap}/bin/setxkbmap ${defaultLanguage.code},${code} ${defaultLanguage.variant},${variant} ${toString (map (option: "-option ${option}") xkbOptions)} '') - languages; + languages ++ + lib.mapAttrsToList + (language: settings: + let + code = if settings ? "code" then settings.code else language; + variant = if settings ? "variant" then settings.variant else ""; + in + pkgs.writers.writeDashBin "kb-niri-${language}" '' + ${pkgs.gnused}/bin/sed -i 's/^\(\s*layout\) ".*"$/\1 "${defaultLanguage.code},${code}"/;s/^\(\s*variant\) ".*"$/\1 "${defaultLanguage.variant},${variant}"/' ~/.config/niri/config.kdl + '') languages; # improve held key rate services.xserver.displayManager.sessionCommands = "${pkgs.xorg.xset}/bin/xset r rate 300 50"; diff --git a/configs/neovim.nix b/configs/neovim.nix index a011bd7..c95117c 100644 --- a/configs/neovim.nix +++ b/configs/neovim.nix @@ -37,8 +37,8 @@ environment.systemPackages = [ (pkgs.writers.writeDashBin "vim" ''neovim "$@"'') (niveumPackages.vim.override { - # stylixColors = config.lib.stylix.colors; - colorscheme = "base16-gruvbox-light-medium"; + stylixColors = config.lib.stylix.colors; + # colorscheme = "base16-gruvbox-light-medium"; }) # language servers diff --git a/configs/niri.nix b/configs/niri.nix index e30810c..150f458 100644 --- a/configs/niri.nix +++ b/configs/niri.nix @@ -1,298 +1,307 @@ -{ pkgs, config, niveumPackages, lib, ... }: +{ + pkgs, + config, + niveumPackages, + lib, + ... +}: let + inherit (import ../lib) defaultApplications; niriConfig = - let - klem = niveumPackages.klem.override { - config.dmenu = "${pkgs.dmenu}/bin/dmenu -i -p klem"; - config.scripts = { - "p.r paste" = pkgs.writers.writeDash "p.r" '' - ${pkgs.curl}/bin/curl -fSs http://p.r --data-binary @- \ - | ${pkgs.coreutils}/bin/tail --lines=1 \ - | ${pkgs.gnused}/bin/sed 's/\\/krebsco.de/' - ''; - "envs.sh paste" = pkgs.writers.writeDash "envs-host" '' - ${pkgs.curl}/bin/curl -F "file=@-" https://envs.sh - ''; - "envs.sh shorten" = pkgs.writers.writeDash "envs-shorten" '' - ${pkgs.curl}/bin/curl -F "shorten=$(${pkgs.coreutils}/bin/cat)" https://envs.sh - ''; - "go.r shorten" = pkgs.writers.writeDash "go.r" '' - ${pkgs.curl}/bin/curl -fSs http://go.r -F "uri=$(${pkgs.coreutils}/bin/cat)" - ''; - "4d2.org paste" = pkgs.writers.writeDash "4d2-paste" '' - ${pkgs.curl}/bin/curl -F "file=@-" https://depot.4d2.org/ - ''; - "0x0.st shorten" = pkgs.writers.writeDash "0x0.st" '' - ${pkgs.curl}/bin/curl -fSs https://0x0.st -F "shorten=$(${pkgs.coreutils}/bin/cat)" - ''; - "rot13" = pkgs.writers.writeDash "rot13" '' - ${pkgs.coreutils}/bin/tr '[A-Za-z]' '[N-ZA-Mn-za-m]' - ''; - "ipa" = pkgs.writers.writeDash "ipa" '' - ${niveumPackages.ipa}/bin/ipa - ''; - "betacode" = pkgs.writers.writeDash "betacode" '' - ${niveumPackages.betacode}/bin/betacode - ''; - "curl" = pkgs.writers.writeDash "curl" '' - ${pkgs.curl}/bin/curl -fSs "$(${pkgs.coreutils}/bin/cat)" - ''; - ocr = pkgs.writers.writeDash "ocr" '' - ${pkgs.tesseract4}/bin/tesseract -l eng+deu - stdout - ''; - emojai = pkgs.writers.writeDash "emojai" '' - ${pkgs.curl}/bin/curl https://www.emojai.app/api/generate -X POST -H 'Content-Type: application/json' --data-raw "$(${pkgs.jq}/bin/jq -sR '{emoji:.}')" | ${pkgs.jq}/bin/jq -r .result - ''; - "gpt-3.5" = pkgs.writers.writeDash "gpt" '' - ${niveumPackages.gpt35}/bin/gpt - ''; - gpt-4 = pkgs.writers.writeDash "gpt" '' - ${niveumPackages.gpt4}/bin/gpt - ''; + let + klem = niveumPackages.klem.override { + config.dmenu = "${pkgs.dmenu}/bin/dmenu -i -p klem"; + config.scripts = { + "p.r paste" = pkgs.writers.writeDash "p.r" '' + ${pkgs.curl}/bin/curl -fSs http://p.r --data-binary @- \ + | ${pkgs.coreutils}/bin/tail --lines=1 \ + | ${pkgs.gnused}/bin/sed 's/\\/krebsco.de/' + ''; + "envs.sh paste" = pkgs.writers.writeDash "envs-host" '' + ${pkgs.curl}/bin/curl -F "file=@-" https://envs.sh + ''; + "envs.sh shorten" = pkgs.writers.writeDash "envs-shorten" '' + ${pkgs.curl}/bin/curl -F "shorten=$(${pkgs.coreutils}/bin/cat)" https://envs.sh + ''; + "go.r shorten" = pkgs.writers.writeDash "go.r" '' + ${pkgs.curl}/bin/curl -fSs http://go.r -F "uri=$(${pkgs.coreutils}/bin/cat)" + ''; + "4d2.org paste" = pkgs.writers.writeDash "4d2-paste" '' + ${pkgs.curl}/bin/curl -F "file=@-" https://depot.4d2.org/ + ''; + "0x0.st shorten" = pkgs.writers.writeDash "0x0.st" '' + ${pkgs.curl}/bin/curl -fSs https://0x0.st -F "shorten=$(${pkgs.coreutils}/bin/cat)" + ''; + "rot13" = pkgs.writers.writeDash "rot13" '' + ${pkgs.coreutils}/bin/tr '[A-Za-z]' '[N-ZA-Mn-za-m]' + ''; + "ipa" = pkgs.writers.writeDash "ipa" '' + ${niveumPackages.ipa}/bin/ipa + ''; + "betacode" = pkgs.writers.writeDash "betacode" '' + ${niveumPackages.betacode}/bin/betacode + ''; + "curl" = pkgs.writers.writeDash "curl" '' + ${pkgs.curl}/bin/curl -fSs "$(${pkgs.coreutils}/bin/cat)" + ''; + ocr = pkgs.writers.writeDash "ocr" '' + ${pkgs.tesseract4}/bin/tesseract -l eng+deu - stdout + ''; + emojai = pkgs.writers.writeDash "emojai" '' + ${pkgs.curl}/bin/curl https://www.emojai.app/api/generate -X POST -H 'Content-Type: application/json' --data-raw "$(${pkgs.jq}/bin/jq -sR '{emoji:.}')" | ${pkgs.jq}/bin/jq -r .result + ''; + "gpt-3.5" = pkgs.writers.writeDash "gpt" '' + ${niveumPackages.gpt35}/bin/gpt + ''; + gpt-4 = pkgs.writers.writeDash "gpt" '' + ${niveumPackages.gpt4}/bin/gpt + ''; + }; }; - }; - in - '' - spawn-at-startup "waybar" - spawn-at-startup "${pkgs.xwayland-satellite}/bin/xwayland-satellite" + in + '' + spawn-at-startup "${pkgs.ironbar}/bin/ironbar" + spawn-at-startup "${pkgs.xwayland-satellite}/bin/xwayland-satellite" - environment { - DISPLAY ":0" - } + environment { + DISPLAY ":0" + ANKI_WAYLAND "1" + } - input { - warp-mouse-to-focus - focus-follows-mouse max-scroll-amount="0%" + input { + warp-mouse-to-focus + focus-follows-mouse max-scroll-amount="0%" - keyboard { - repeat-rate 35 - repeat-delay 350 - track-layout "global" + keyboard { + repeat-rate 35 + repeat-delay 350 + track-layout "global" - xkb { - layout "de" - variant "T3" - options "ctrl:nocaps,compose:caps,grp:ctrls_toggle" - } - } - touchpad { - click-method "clickfinger" - tap - dwt - dwtp - } - } + xkb { + layout "de" + variant "T3" + options "ctrl:nocaps,compose:caps,grp:ctrls_toggle" + } + } + touchpad { + click-method "clickfinger" + tap + dwt + dwtp + } + } - prefer-no-csd + prefer-no-csd - hotkey-overlay { - skip-at-startup - } + hotkey-overlay { + skip-at-startup + } - layout { - gaps 5 + layout { + gaps 5 - default-column-width { - proportion 0.5 - } - - preset-column-widths { - proportion 0.33333 + default-column-width { proportion 0.5 - proportion 0.66667 + } + + preset-column-widths { + proportion 0.33333 + proportion 0.5 + proportion 0.66667 + } + + focus-ring { + width 2 + } + + shadow { + // on + softness 30 + spread 5 + offset x=0 y=5 + draw-behind-window true + color "#00000070" + // inactive-color "#00000054" + } + + tab-indicator { + // off + hide-when-single-tab + place-within-column + gap 5 + width 4 + length total-proportion=1.0 + position "right" + gaps-between-tabs 2 + corner-radius 8 + active-color "red" + inactive-color "gray" + urgent-color "blue" + // active-gradient from="#80c8ff" to="#bbddff" angle=45 + // inactive-gradient from="#505050" to="#808080" angle=45 relative-to="workspace-view" + // urgent-gradient from="#800" to="#a33" angle=45 + } + + border { + off + } + } + + animations { + // off + workspace-switch { + spring damping-ratio=1.0 stiffness=1000 epsilon=0.0001 } - focus-ring { - width 2 + window-open { + duration-ms 150 + curve "ease-out-expo" } - shadow { - // on - softness 30 - spread 5 - offset x=0 y=5 - draw-behind-window true - color "#00000070" - // inactive-color "#00000054" + window-close { + duration-ms 150 + curve "ease-out-quad" } - tab-indicator { - // off - hide-when-single-tab - place-within-column - gap 5 - width 4 - length total-proportion=1.0 - position "right" - gaps-between-tabs 2 - corner-radius 8 - active-color "red" - inactive-color "gray" - urgent-color "blue" - // active-gradient from="#80c8ff" to="#bbddff" angle=45 - // inactive-gradient from="#505050" to="#808080" angle=45 relative-to="workspace-view" - // urgent-gradient from="#800" to="#a33" angle=45 + horizontal-view-movement { + spring damping-ratio=1.0 stiffness=800 epsilon=0.0001 } - border { - off + window-movement { + spring damping-ratio=1.0 stiffness=800 epsilon=0.0001 } - } - animations { - // off - workspace-switch { - spring damping-ratio=1.0 stiffness=1000 epsilon=0.0001 - } - - window-open { - duration-ms 150 - curve "ease-out-expo" - } - - window-close { - duration-ms 150 - curve "ease-out-quad" - } - - horizontal-view-movement { - spring damping-ratio=1.0 stiffness=800 epsilon=0.0001 - } - - window-movement { - spring damping-ratio=1.0 stiffness=800 epsilon=0.0001 - } - - window-resize { - spring damping-ratio=1.0 stiffness=800 epsilon=0.0001 - } - - config-notification-open-close { - spring damping-ratio=0.6 stiffness=1000 epsilon=0.001 - } - - screenshot-ui-open { - duration-ms 200 - curve "ease-out-quad" - } - - overview-open-close { - spring damping-ratio=1.0 stiffness=800 epsilon=0.0001 - } - } - - window-rule { - geometry-corner-radius 0 - clip-to-geometry true - } - - window-rule { - match is-window-cast-target=true - - border { - on - width 3 - active-color "#f38ba8" - inactive-color "#7d0d2d" + window-resize { + spring damping-ratio=1.0 stiffness=800 epsilon=0.0001 } - } - binds { - Mod+Shift+Slash { show-hotkey-overlay; } - Mod+Return { spawn "${(defaultApplications pkgs).terminal}"; } - Mod+D { spawn "${pkgs.wofi}/bin/wofi" "--show" "run"; } - Mod+Shift+D { spawn "${niveumPackages.notemenu}/bin/notemenu"; } - Mod+T { spawn "${(defaultApplications pkgs).fileManager}"; } - Mod+Y { spawn "${(defaultApplications pkgs).browser}"; } - Mod+P { spawn "rofi-pass"; } - Mod+U { spawn "${niveumPackages.unicodmenu}/bin/unicodmenu"; } + config-notification-open-close { + spring damping-ratio=0.6 stiffness=1000 epsilon=0.001 + } - Mod+B { spawn "pkill" "-SIGUSR1" "waybar"; } - Mod+F12 { spawn "${klem}/bin/klem"; } + screenshot-ui-open { + duration-ms 200 + curve "ease-out-quad" + } - Mod+Shift+Q { close-window; } + overview-open-close { + spring damping-ratio=1.0 stiffness=800 epsilon=0.0001 + } + } - XF86AudioRaiseVolume allow-when-locked=true { spawn "${pkgs.pamixer}/bin/pamixer -i 5"; } - XF86AudioLowerVolume allow-when-locked=true { spawn "${pkgs.pamixer}/bin/pamixer -d 5"; } - XF86AudioMute allow-when-locked=true { spawn "${pkgs.pamixer}/bin/pamixer -t"; } + window-rule { + geometry-corner-radius 0 + clip-to-geometry true + } - XF86AudioPause allow-when-locked=true { spawn "${pkgs.playerctl}/bin/playerctl play-pause"; } - XF86AudioPlay allow-when-locked=true { spawn "${pkgs.playerctl}/bin/playerctl play-pause"; } - XF86AudioNext allow-when-locked=true { spawn "${pkgs.playerctl}/bin/playerctl next"; } - XF86AudioPrev allow-when-locked=true { spawn "${pkgs.playerctl}/bin/playerctl previous"; } - XF86AudioStop allow-when-locked=true { spawn "${pkgs.playerctl}/bin/playerctl stop"; } - Print { spawn "flameshot gui"; } - Mod+Shift+W { spawn "swaylock"; } + window-rule { + match is-window-cast-target=true - Mod+Comma { consume-or-expel-window-left; } - Mod+Period { consume-or-expel-window-right; } - Mod+W { toggle-column-tabbed-display; } - Mod+A repeat=false { toggle-overview; } - Mod+F { maximize-column; } - Mod+C { center-column; } - Mod+Minus { set-column-width "-25%"; } - Mod+Plus { set-column-width "+25%"; } + border { + on + width 3 + active-color "#f38ba8" + inactive-color "#7d0d2d" + } + } - Mod+Ctrl+0 { spawn "niri" "msg" "action" "switch-layout" "0"; } - Mod+Ctrl+1 { spawn "niri" "msg" "action" "switch-layout" "1"; } - Mod+Ctrl+2 { spawn "niri" "msg" "action" "switch-layout" "2"; } - Mod+Ctrl+3 { spawn "niri" "msg" "action" "switch-layout" "3"; } - Mod+Ctrl+4 { spawn "niri" "msg" "action" "switch-layout" "4"; } - Mod+Ctrl+5 { spawn "niri" "msg" "action" "switch-layout" "5"; } - Mod+Ctrl+6 { spawn "niri" "msg" "action" "switch-layout" "6"; } - Mod+Ctrl+7 { spawn "niri" "msg" "action" "switch-layout" "7"; } - Mod+Ctrl+8 { spawn "niri" "msg" "action" "switch-layout" "8"; } - Mod+Ctrl+9 { spawn "niri" "msg" "action" "switch-layout" "9"; } + binds { + Mod+Shift+Slash { show-hotkey-overlay; } + Mod+Return { spawn "${(defaultApplications pkgs).terminal}"; } + Mod+D { spawn "${pkgs.wofi}/bin/wofi" "--show" "run"; } + Mod+Shift+D { spawn "${niveumPackages.notemenu}/bin/notemenu"; } + Mod+T { spawn "${(defaultApplications pkgs).fileManager}"; } + Mod+Y { spawn "${(defaultApplications pkgs).browser}"; } + Mod+P { spawn "${niveumPackages.passmenu}/bin/passmenu"; } + Mod+U { spawn "${niveumPackages.unicodmenu}/bin/unicodmenu"; } - Mod+H { focus-column-or-monitor-left; } - Mod+J { focus-window-or-workspace-down; } - Mod+K { focus-window-or-workspace-up; } - Mod+L { focus-column-or-monitor-right; } + Mod+B { spawn "${pkgs.ironbar}/bin/ironbar" "bar" "bar-1337" "toggle-visible"; } + Mod+F12 { spawn "${klem}/bin/klem"; } - Mod+Shift+H { move-column-left-or-to-monitor-left; } - Mod+Shift+J { move-window-down-or-to-workspace-down; } - Mod+Shift+K { move-window-up-or-to-workspace-up; } - Mod+Shift+L { move-column-right-or-to-monitor-right; } + Mod+Shift+Q { close-window; } - Mod+Ctrl+H { focus-monitor-left; } - Mod+Ctrl+J { focus-monitor-down; } - Mod+Ctrl+K { focus-monitor-up; } - Mod+Ctrl+L { focus-monitor-right; } + XF86AudioRaiseVolume allow-when-locked=true { spawn "${pkgs.pamixer}/bin/pamixer -i 5"; } + XF86AudioLowerVolume allow-when-locked=true { spawn "${pkgs.pamixer}/bin/pamixer -d 5"; } + XF86AudioMute allow-when-locked=true { spawn "${pkgs.pamixer}/bin/pamixer -t"; } - Mod+Shift+Ctrl+H { move-column-to-monitor-left; } - Mod+Shift+Ctrl+J { move-column-to-workspace-down; } - Mod+Shift+Ctrl+K { move-column-to-workspace-up; } - Mod+Shift+Ctrl+L { move-column-to-monitor-right; } + XF86AudioPause allow-when-locked=true { spawn "${pkgs.playerctl}/bin/playerctl play-pause"; } + XF86AudioPlay allow-when-locked=true { spawn "${pkgs.playerctl}/bin/playerctl play-pause"; } + XF86AudioNext allow-when-locked=true { spawn "${pkgs.playerctl}/bin/playerctl next"; } + XF86AudioPrev allow-when-locked=true { spawn "${pkgs.playerctl}/bin/playerctl previous"; } + XF86AudioStop allow-when-locked=true { spawn "${pkgs.playerctl}/bin/playerctl stop"; } + Print { spawn "flameshot gui"; } + Mod+Shift+W { spawn "swaylock"; } - Mod+Shift+Alt+Ctrl+H { move-workspace-to-monitor-left; } - Mod+Shift+Alt+Ctrl+J { move-workspace-down; } - Mod+Shift+Alt+Ctrl+K { move-workspace-up; } - Mod+Shift+Alt+Ctrl+L { move-workspace-to-monitor-right; } + Mod+Comma { consume-or-expel-window-left; } + Mod+Period { consume-or-expel-window-right; } + Mod+W { toggle-column-tabbed-display; } + Mod+A repeat=false { toggle-overview; } + Mod+F { maximize-column; } + Mod+C { center-column; } + Mod+Minus { set-column-width "-25%"; } + Mod+Plus { set-column-width "+25%"; } - 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+0 { focus-workspace 10; } + Mod+Ctrl+0 { spawn "niri" "msg" "action" "switch-layout" "0"; } + Mod+Ctrl+1 { spawn "niri" "msg" "action" "switch-layout" "1"; } + Mod+Ctrl+2 { spawn "niri" "msg" "action" "switch-layout" "2"; } + Mod+Ctrl+3 { spawn "niri" "msg" "action" "switch-layout" "3"; } + Mod+Ctrl+4 { spawn "niri" "msg" "action" "switch-layout" "4"; } + Mod+Ctrl+5 { spawn "niri" "msg" "action" "switch-layout" "5"; } + Mod+Ctrl+6 { spawn "niri" "msg" "action" "switch-layout" "6"; } + Mod+Ctrl+7 { spawn "niri" "msg" "action" "switch-layout" "7"; } + Mod+Ctrl+8 { spawn "niri" "msg" "action" "switch-layout" "8"; } + Mod+Ctrl+9 { spawn "niri" "msg" "action" "switch-layout" "9"; } - Mod+Shift+1 { move-window-to-workspace "1"; } - Mod+Shift+2 { move-window-to-workspace "2"; } - Mod+Shift+3 { move-window-to-workspace "3"; } - Mod+Shift+4 { move-window-to-workspace "4"; } - Mod+Shift+5 { move-window-to-workspace "5"; } - Mod+Shift+6 { move-window-to-workspace "6"; } - Mod+Shift+7 { move-window-to-workspace "7"; } - Mod+Shift+8 { move-window-to-workspace "8"; } - Mod+Shift+9 { move-window-to-workspace "9"; } - Mod+Shift+0 { move-window-to-workspace "0"; } - } - ''; -in { + Mod+H { focus-column-or-monitor-left; } + Mod+J { focus-window-or-workspace-down; } + Mod+K { focus-window-or-workspace-up; } + Mod+L { focus-column-or-monitor-right; } + + Mod+Shift+H { move-column-left-or-to-monitor-left; } + Mod+Shift+J { move-window-down-or-to-workspace-down; } + Mod+Shift+K { move-window-up-or-to-workspace-up; } + Mod+Shift+L { move-column-right-or-to-monitor-right; } + + Mod+Ctrl+H { focus-monitor-left; } + Mod+Ctrl+J { focus-monitor-down; } + Mod+Ctrl+K { focus-monitor-up; } + Mod+Ctrl+L { focus-monitor-right; } + + Mod+Shift+Ctrl+H { move-column-to-monitor-left; } + Mod+Shift+Ctrl+J { move-column-to-workspace-down; } + Mod+Shift+Ctrl+K { move-column-to-workspace-up; } + Mod+Shift+Ctrl+L { move-column-to-monitor-right; } + + Mod+Shift+Alt+Ctrl+H { move-workspace-to-monitor-left; } + Mod+Shift+Alt+Ctrl+J { move-workspace-down; } + Mod+Shift+Alt+Ctrl+K { move-workspace-up; } + Mod+Shift+Alt+Ctrl+L { move-workspace-to-monitor-right; } + + 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+0 { focus-workspace 10; } + + Mod+Shift+1 { move-window-to-workspace "1"; } + Mod+Shift+2 { move-window-to-workspace "2"; } + Mod+Shift+3 { move-window-to-workspace "3"; } + Mod+Shift+4 { move-window-to-workspace "4"; } + Mod+Shift+5 { move-window-to-workspace "5"; } + Mod+Shift+6 { move-window-to-workspace "6"; } + Mod+Shift+7 { move-window-to-workspace "7"; } + Mod+Shift+8 { move-window-to-workspace "8"; } + Mod+Shift+9 { move-window-to-workspace "9"; } + Mod+Shift+0 { move-window-to-workspace "0"; } + } + ''; +in +{ system.activationScripts.niriConfig = { text = '' cp ${pkgs.writeText "config.kdl" niriConfig} ${config.users.users.me.home}/.config/niri/config.kdl @@ -303,14 +312,113 @@ in { programs.niri.enable = true; services.displayManager.defaultSession = lib.mkForce "niri"; home-manager.users.me = { + xdg.configFile."ironbar/style.css".text = '' + * { + font-size: 8pt; + font-family: "Gentium Plus", "BlexMono Nerd Font"; + } + + box, menubar, button { + background-color: unset; + box-shadow: none; + background-image: none; + } + + .clock, .upower, .volume { + font-weight: unset; + } + + tooltip * { + font-family: "BlexMono Nerd Font"; + font-size: 7pt; + } + ''; + xdg.configFile."ironbar/config.json".source = (pkgs.formats.json { }).generate "ironbar.json" { + name = "bar-1337"; + height = 12; + layer = "top"; + position = "bottom"; + start = [ ]; + center = [ + { + type = "tray"; + icon_size = 8; + } + { type = "clipboard"; } + { type = "notifications"; } + ]; + end = [ + { + type = "upower"; + icon_size = 8; + format = "{percentage}%"; + } + { + type = "label"; + tooltip = "{{df -h --output=size,used,avail,pcent,target}}"; + label = "\t{{5000:df -h / --output=avail | tail +2}}"; + } + { + type = "label"; + tooltip = "{{free -Lh --si | awk '{for(i=1;i<=NF;i++){printf \"%s%s\", $i, (i%2? OFS: ORS)} if(NF%2) printf ORS}'}}"; + label = "󰍛\t{{500:free -h --si | awk 'NR==2{printf $3 \"\\n\"}'}}"; + } + { + type = "label"; + tooltip = "{{}}"; + on_click_left = "pamixer -t"; + on_scroll_up = "pamixer -i 1"; + on_scroll_down = "pamixer -d 1"; + label = "{{500:if $(pamixer --get-mute) = true; then echo ; else echo ; fi}}\t{{500:pamixer --get-volume}}%"; + } + { + type = "label"; + tooltip = "{{uptime}}"; + label = "\t{{500:uptime | sed 's/.*load average: \\([^ ]*\\);.*/\\1/' | tr ' ' '\n'}}"; + } + { + type = "label"; + tooltip = "{{khal list today today -d astro-test-3 }}"; + label = ""; + } + { + type = "label"; + tooltip = "{{curl wttr.in/?0 | ${pkgs.ansifilter}/bin/ansifilter}}"; + label = "󰔏"; + } + { + type = "label"; + name = "cal"; + tooltip = "{{cal}}"; + label = "{{500:date +'\t%Y-%m-%d (%W %a) %H:%M'}}"; + } + ]; + }; programs.alacritty.enable = true; # Super+T in the default setting (terminal) programs.swaylock.enable = true; # Super+Alt+L in the default setting (screen locker) - programs.waybar = { - enable = true; # launch on startup in the default setting (bar) + services.swaync = { + enable = true; settings = { + notification-window-width = 300; + control-center-width = 300; + widgets = [ + "volume" + "mpris" + "title" + "dnd" + "notifications" + ]; + widget-config = { + title = { + text = "ⲡⲧⲏⲣϥ̄"; + "clear-all-button" = true; + "button-text" = "ⲧⲁⲩⲟⲟⲩ"; + }; + dnd.text = "ⲙ̄ⲡⲣ̄ϣⲧⲣ̄ⲧⲱⲣⲧ̄"; + label.text = "ⲧⲙⲏⲧⲉ"; + }; }; }; - services.mako.enable = true; # notification daemon services.swayidle.enable = true; # idle management daemon home.packages = with pkgs; [ xdg-desktop-portal-gnome diff --git a/configs/stylix.nix b/configs/stylix.nix index eaa177e..f015f34 100644 --- a/configs/stylix.nix +++ b/configs/stylix.nix @@ -18,7 +18,7 @@ in { stylix.enable = true; stylix.image = generatedWallpaper; - stylix.base16Scheme = "${pkgs.base16-schemes}/share/themes/gruvbox-light-medium.yaml"; + stylix.base16Scheme = "${pkgs.base16-schemes}/share/themes/ayu-light.yaml"; stylix.cursor = { name = "capitaine-cursors-white"; @@ -52,18 +52,18 @@ in { stylix.fonts = { serif = { - package = pkgs.noto-fonts; - name = "Noto Serif"; + package = pkgs.gentium; + name = "Gentium Plus"; }; sansSerif = { - package = pkgs.noto-fonts; - name = "Noto Sans"; + package = pkgs.gentium; + name = "Gentium Plus"; }; monospace = { - package = pkgs.noto-fonts; - name = "Noto Sans Mono"; + package = pkgs.nerd-fonts.blex-mono; + name = "BlexMono Nerd Font"; }; emoji = { diff --git a/flake.nix b/flake.nix index 273ebdf..e04f64a 100644 --- a/flake.nix +++ b/flake.nix @@ -407,6 +407,7 @@ text2pdf = pkgs.callPackage packages/text2pdf.nix {}; timer = pkgs.callPackage packages/timer.nix {}; tocharian-font = pkgs.callPackage packages/tocharian-font.nix {}; + passmenu = pkgs.callPackage packages/passmenu.nix {}; trans = pkgs.callPackage packages/trans.nix {}; ttspaste = pkgs.callPackage packages/ttspaste.nix {}; unicodmenu = pkgs.callPackage packages/unicodmenu.nix {}; diff --git a/packages/passmenu.nix b/packages/passmenu.nix new file mode 100644 index 0000000..9b552ac --- /dev/null +++ b/packages/passmenu.nix @@ -0,0 +1,18 @@ +{ writers, wofi, pass, libnotify, ... }: +writers.writeBashBin "passmenu" '' + shopt -s nullglob globstar + + IFS=$'\n' + + prefix=$(readlink -f $${PASSWORD_STORE_DIR-~/.password-store}) + password_files=( $( fd -L ".gpg\$" "$prefix" ) ) + password_files=( "$${password_files[@]#"$prefix"/}" ) + password_files=( "$${password_files[@]%.gpg}" ) + + password=$( printf '%s\n' "$${password_files[@]}" | ${wofi}/bin/wofi -i -k /dev/null -d menu -- "$@" ) + + [[ -n $password ]] || exit + + OUT=$(${pass}/bin/pass show --clip "$password") + ${libnotify}/bin/notify-send -t 5000 "$(echo "$OUT" | grep '^login:' | sed 's/^login: //')" +'' diff --git a/systems/kabsa/configuration.nix b/systems/kabsa/configuration.nix index 6e39970..c3100dd 100644 --- a/systems/kabsa/configuration.nix +++ b/systems/kabsa/configuration.nix @@ -7,8 +7,8 @@ ... }: let - inherit (import ../../lib) retiolumAddresses defaultApplications; # TODO wrap obsidian: obsidian --no-sandbox --ozone-platform=wayland --ozone-platform-hint=auto --enable-features=UseOzonePlatform,WaylandWindowDecorations %U + inherit (import ../../lib) retiolumAddresses; in { imports = [ @@ -17,313 +17,6 @@ in ../../configs/default.nix ../../configs/networkmanager.nix ../../configs/power-action.nix - { - programs.niri.enable = true; - services.displayManager.defaultSession = lib.mkForce "niri"; - home-manager.users.me = { - imports = [ inputs.centerpiece.hmModules."x86_64-linux".default ]; - programs.centerpiece = { - enable = true; - config.plugin = { - clock.enable = true; - resource_monitor_battery.enable = true; - resource_monitor_cpu.enable = true; - resource_monitor_disks.enable = true; - resource_monitor_memory.enable = true; - system.enable = true; - wifi.enable = true; - }; - }; - - programs.alacritty.enable = true; # Super+T in the default setting (terminal) - programs.swaylock.enable = true; # Super+Alt+L in the default setting (screen locker) - programs.waybar.enable = true; # launch on startup in the default setting (bar) - services.mako.enable = true; # notification daemon - services.swayidle.enable = true; # idle management daemon - home.packages = with pkgs; [ - xdg-desktop-portal-gnome - swaybg - ]; - home.file.".config/niri/config.kdl".text = - let - klem = niveumPackages.klem.override { - config.dmenu = "${pkgs.dmenu}/bin/dmenu -i -p klem"; - config.scripts = { - "p.r paste" = pkgs.writers.writeDash "p.r" '' - ${pkgs.curl}/bin/curl -fSs http://p.r --data-binary @- \ - | ${pkgs.coreutils}/bin/tail --lines=1 \ - | ${pkgs.gnused}/bin/sed 's/\\/krebsco.de/' - ''; - "envs.sh paste" = pkgs.writers.writeDash "envs-host" '' - ${pkgs.curl}/bin/curl -F "file=@-" https://envs.sh - ''; - "envs.sh shorten" = pkgs.writers.writeDash "envs-shorten" '' - ${pkgs.curl}/bin/curl -F "shorten=$(${pkgs.coreutils}/bin/cat)" https://envs.sh - ''; - "go.r shorten" = pkgs.writers.writeDash "go.r" '' - ${pkgs.curl}/bin/curl -fSs http://go.r -F "uri=$(${pkgs.coreutils}/bin/cat)" - ''; - "4d2.org paste" = pkgs.writers.writeDash "4d2-paste" '' - ${pkgs.curl}/bin/curl -F "file=@-" https://depot.4d2.org/ - ''; - "0x0.st shorten" = pkgs.writers.writeDash "0x0.st" '' - ${pkgs.curl}/bin/curl -fSs https://0x0.st -F "shorten=$(${pkgs.coreutils}/bin/cat)" - ''; - "rot13" = pkgs.writers.writeDash "rot13" '' - ${pkgs.coreutils}/bin/tr '[A-Za-z]' '[N-ZA-Mn-za-m]' - ''; - "ipa" = pkgs.writers.writeDash "ipa" '' - ${niveumPackages.ipa}/bin/ipa - ''; - "betacode" = pkgs.writers.writeDash "betacode" '' - ${niveumPackages.betacode}/bin/betacode - ''; - "curl" = pkgs.writers.writeDash "curl" '' - ${pkgs.curl}/bin/curl -fSs "$(${pkgs.coreutils}/bin/cat)" - ''; - ocr = pkgs.writers.writeDash "ocr" '' - ${pkgs.tesseract4}/bin/tesseract -l eng+deu - stdout - ''; - emojai = pkgs.writers.writeDash "emojai" '' - ${pkgs.curl}/bin/curl https://www.emojai.app/api/generate -X POST -H 'Content-Type: application/json' --data-raw "$(${pkgs.jq}/bin/jq -sR '{emoji:.}')" | ${pkgs.jq}/bin/jq -r .result - ''; - "gpt-3.5" = pkgs.writers.writeDash "gpt" '' - ${niveumPackages.gpt35}/bin/gpt - ''; - gpt-4 = pkgs.writers.writeDash "gpt" '' - ${niveumPackages.gpt4}/bin/gpt - ''; - }; - }; - in - '' - spawn-at-startup "waybar" - - input { - warp-mouse-to-focus - focus-follows-mouse max-scroll-amount="0%" - - keyboard { - repeat-rate 35 - repeat-delay 350 - track-layout "global" - - xkb { - layout "de" - variant "T3" - options "ctrl:nocaps,compose:caps" - } - } - touchpad { - click-method "clickfinger" - tap - dwt - dwtp - } - } - - prefer-no-csd - - hotkey-overlay { - skip-at-startup - } - - layout { - gaps 5 - - default-column-width { - proportion 0.5 - } - - preset-column-widths { - proportion 0.33333 - proportion 0.5 - proportion 0.66667 - } - - focus-ring { - width 2 - } - - shadow { - // on - softness 30 - spread 5 - offset x=0 y=5 - draw-behind-window true - color "#00000070" - // inactive-color "#00000054" - } - - tab-indicator { - // off - hide-when-single-tab - place-within-column - gap 5 - width 4 - length total-proportion=1.0 - position "right" - gaps-between-tabs 2 - corner-radius 8 - active-color "red" - inactive-color "gray" - urgent-color "blue" - // active-gradient from="#80c8ff" to="#bbddff" angle=45 - // inactive-gradient from="#505050" to="#808080" angle=45 relative-to="workspace-view" - // urgent-gradient from="#800" to="#a33" angle=45 - } - - border { - off - } - } - - animations { - // off - workspace-switch { - spring damping-ratio=1.0 stiffness=1000 epsilon=0.0001 - } - - window-open { - duration-ms 150 - curve "ease-out-expo" - } - - window-close { - duration-ms 150 - curve "ease-out-quad" - } - - horizontal-view-movement { - spring damping-ratio=1.0 stiffness=800 epsilon=0.0001 - } - - window-movement { - spring damping-ratio=1.0 stiffness=800 epsilon=0.0001 - } - - window-resize { - spring damping-ratio=1.0 stiffness=800 epsilon=0.0001 - } - - config-notification-open-close { - spring damping-ratio=0.6 stiffness=1000 epsilon=0.001 - } - - screenshot-ui-open { - duration-ms 200 - curve "ease-out-quad" - } - - overview-open-close { - spring damping-ratio=1.0 stiffness=800 epsilon=0.0001 - } - } - - window-rule { - geometry-corner-radius 0 - clip-to-geometry true - } - - window-rule { - match is-window-cast-target=true - - border { - on - width 3 - active-color "#f38ba8" - inactive-color "#7d0d2d" - } - } - - binds { - Mod+Shift+Slash { show-hotkey-overlay; } - Mod+Return { spawn "${(defaultApplications pkgs).terminal}"; } - Mod+D { spawn "${pkgs.wofi}/bin/wofi --show run"; } - Mod+Shift+D { spawn "${niveumPackages.notemenu}/bin/notemenu"; } - Mod+T { spawn "${(defaultApplications pkgs).fileManager}"; } - Mod+Y { spawn "${(defaultApplications pkgs).browser}"; } - Mod+P { spawn "rofi-pass"; } - Mod+U { spawn "${niveumPackages.unicodmenu}/bin/unicodmenu"; } - - Mod+B { spawn "pkill -SIGUSR1 waybar"; } - Mod+F12 { spawn "${klem}/bin/klem"; } - - Mod+Shift+Q { close-window; } - - XF86AudioRaiseVolume allow-when-locked=true { spawn "${pkgs.pamixer}/bin/pamixer -i 5"; } - XF86AudioLowerVolume allow-when-locked=true { spawn "${pkgs.pamixer}/bin/pamixer -d 5"; } - XF86AudioMute allow-when-locked=true { spawn "${pkgs.pamixer}/bin/pamixer -t"; } - - XF86AudioPause allow-when-locked=true { spawn "${pkgs.playerctl}/bin/playerctl play-pause"; } - XF86AudioPlay allow-when-locked=true { spawn "${pkgs.playerctl}/bin/playerctl play-pause"; } - XF86AudioNext allow-when-locked=true { spawn "${pkgs.playerctl}/bin/playerctl next"; } - XF86AudioPrev allow-when-locked=true { spawn "${pkgs.playerctl}/bin/playerctl previous"; } - XF86AudioStop allow-when-locked=true { spawn "${pkgs.playerctl}/bin/playerctl stop"; } - Print { spawn "flameshot gui"; } - Mod+Shift+W { spawn "swaylock"; } - - Mod+Comma { consume-or-expel-window-left; } - Mod+Period { consume-or-expel-window-right; } - Mod+W { toggle-column-tabbed-display; } - Mod+A repeat=false { toggle-overview; } - Mod+F { maximize-column; } - Mod+C { center-column; } - Mod+Minus { set-column-width "-25%"; } - Mod+Plus { set-column-width "+25%"; } - - Mod+H { focus-column-or-monitor-left; } - Mod+J { focus-window-or-workspace-down; } - Mod+K { focus-window-or-workspace-up; } - Mod+L { focus-column-or-monitor-right; } - - Mod+Shift+H { move-column-left-or-to-monitor-left; } - Mod+Shift+J { move-window-down-or-to-workspace-down; } - Mod+Shift+K { move-window-up-or-to-workspace-up; } - Mod+Shift+L { move-column-right-or-to-monitor-right; } - - Mod+Ctrl+H { focus-monitor-left; } - Mod+Ctrl+J { focus-monitor-down; } - Mod+Ctrl+K { focus-monitor-up; } - Mod+Ctrl+L { focus-monitor-right; } - - Mod+Shift+Ctrl+H { move-column-to-monitor-left; } - Mod+Shift+Ctrl+J { move-column-to-workspace-down; } - Mod+Shift+Ctrl+K { move-column-to-workspace-up; } - Mod+Shift+Ctrl+L { move-column-to-monitor-right; } - - Mod+Shift+Alt+Ctrl+H { move-workspace-to-monitor-left; } - Mod+Shift+Alt+Ctrl+J { move-workspace-down; } - Mod+Shift+Alt+Ctrl+K { move-workspace-up; } - Mod+Shift+Alt+Ctrl+L { move-workspace-to-monitor-right; } - - 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+0 { focus-workspace 10; } - - Mod+Shift+1 { move-window-to-workspace "1"; } - Mod+Shift+2 { move-window-to-workspace "2"; } - Mod+Shift+3 { move-window-to-workspace "3"; } - Mod+Shift+4 { move-window-to-workspace "4"; } - Mod+Shift+5 { move-window-to-workspace "5"; } - Mod+Shift+6 { move-window-to-workspace "6"; } - Mod+Shift+7 { move-window-to-workspace "7"; } - Mod+Shift+8 { move-window-to-workspace "8"; } - Mod+Shift+9 { move-window-to-workspace "9"; } - Mod+Shift+0 { move-window-to-workspace "0"; } - } - ''; - }; - services.gnome.gnome-keyring.enable = true; # secret service - security.pam.services.swaylock = { }; - } ]; niveum = {