From cd08309515bce3796777f4b20efffd379b9fabcc Mon Sep 17 00:00:00 2001 From: bee Date: Fri, 1 May 2026 23:45:21 +0530 Subject: Homecoming --- common/modules/default.nix | 6 +- common/modules/dwm/default.nix | 245 ------------ common/modules/dwm/picom.nix | 63 ---- common/modules/dwm/scripts.nix | 78 ---- common/modules/emacs/default.nix | 33 ++ common/modules/emacs/doom/config.el | 75 ++++ common/modules/emacs/doom/init.el | 199 ++++++++++ common/modules/emacs/doom/packages.el | 54 +++ common/modules/hyprland/default.nix | 380 ------------------- common/modules/mango/default.nix | 416 --------------------- common/modules/matugen/default.nix | 10 +- common/modules/matugen/templates/matugen-mango.nix | 2 +- .../modules/matugen/templates/matugen-neovim.nix | 28 -- .../matugen/templates/matugen-xresources.nix | 2 +- common/modules/terminal/default.nix | 6 +- common/modules/window_managers/default.nix | 72 ++++ common/modules/window_managers/dwm/default.nix | 206 ++++++++++ common/modules/window_managers/dwm/picom.nix | 63 ++++ common/modules/window_managers/dwm/scripts.nix | 78 ++++ .../modules/window_managers/hyprland/default.nix | 343 +++++++++++++++++ common/modules/window_managers/mango/default.nix | 377 +++++++++++++++++++ 21 files changed, 1509 insertions(+), 1227 deletions(-) delete mode 100644 common/modules/dwm/default.nix delete mode 100644 common/modules/dwm/picom.nix delete mode 100644 common/modules/dwm/scripts.nix create mode 100644 common/modules/emacs/default.nix create mode 100644 common/modules/emacs/doom/config.el create mode 100644 common/modules/emacs/doom/init.el create mode 100644 common/modules/emacs/doom/packages.el delete mode 100644 common/modules/hyprland/default.nix delete mode 100644 common/modules/mango/default.nix delete mode 100644 common/modules/matugen/templates/matugen-neovim.nix create mode 100644 common/modules/window_managers/default.nix create mode 100644 common/modules/window_managers/dwm/default.nix create mode 100644 common/modules/window_managers/dwm/picom.nix create mode 100644 common/modules/window_managers/dwm/scripts.nix create mode 100644 common/modules/window_managers/hyprland/default.nix create mode 100644 common/modules/window_managers/mango/default.nix (limited to 'common/modules') diff --git a/common/modules/default.nix b/common/modules/default.nix index ade06b3..0925ffd 100644 --- a/common/modules/default.nix +++ b/common/modules/default.nix @@ -9,12 +9,10 @@ let inherit inputs homeManager; }; modules = { - mango = import ./mango args; - hypr = import ./hyprland args; - dwm = import ./dwm args; + windowManagers = import ./window_managers args; terminal = import ./terminal args; - beevim = import ./beevim args; matugen = import ./matugen args; + emacs = import ./emacs args; }; in modules diff --git a/common/modules/dwm/default.nix b/common/modules/dwm/default.nix deleted file mode 100644 index 07ddef6..0000000 --- a/common/modules/dwm/default.nix +++ /dev/null @@ -1,245 +0,0 @@ -{ - homeManager, - inputs, - moduleNameSpace, - ... -}: -{ - config, - lib, - pkgs, - ... -}: -let - cfg = config.${moduleNameSpace}.dwm; - snipx11 = pkgs.writeShellScript "snipx11" '' - case $1 in - full) - ${pkgs.maim}/bin/maim | xclip -selection clipboard -t image/png - ;; - selection) - ${pkgs.maim}/bin/maim -s | xclip -selection clipboard -t image/png - ;; - window) - ${pkgs.maim}/bin/maim -i $(xdotool getactivewindow) | xclip -selection clipboard -t image/png - ;; - esac - ''; - st-patched = - (pkgs.st.override { - extraLibs = [ pkgs.libXcursor ]; - }).overrideAttrs - (oldAttrs: rec { - patches = map pkgs.fetchpatch [ - { - url = "https://st.suckless.org/patches/scrollback/st-scrollback-0.9.2.diff"; - sha256 = "sha256-ZypvRONAHS//wnZjivmqpWIqZlKTqAQ0Q8DhQpZVaqU="; - } - { - url = "https://st.suckless.org/patches/scrollback/st-scrollback-mouse-0.9.2.diff"; - sha256 = "sha256-CuNJ5FdKmAtEjwbgKeBKPJTdEfJvIdmeSAphbz0u3Uk="; - } - { - url = "https://st.suckless.org/patches/scrollback/st-scrollback-mouse-altscreen-20220127-2c5edf2.diff"; - sha256 = "sha256-8oVLgbsYCfMhNEOGadb5DFajdDKPxwgf3P/4vOXfUFo="; - } - { - url = "https://st.suckless.org/patches/xresources/st-xresources-20230320-45a15676.diff"; - sha256 = "sha256-WcL9IeyanXFiOFDGGRU0QNT8DU7wSo2o+3n+TaqASUY="; - } - { - url = "https://st.suckless.org/patches/vertcenter/st-vertcenter-20231003-eb3b894.diff"; - sha256 = "sha256-RbFNdGNi5HLAp1s8QOX3qsfxpkLcp1p/vksyZORN/uc="; - } - { - url = "https://st.suckless.org/patches/anysize/st-anysize-20220718-baa9357.diff"; - hash = "sha256-yx9VSwmPACx3EN3CAdQkxeoJKJxQ6ziC9tpBcoWuWHc="; - } - { - url = "https://st.suckless.org/patches/csi_22_23/st-csi_22_23-0.8.5.diff"; - hash = "sha256-+izEkGVkLCbhZNBD2WN4uX5j+YMmou7JaMVmPG0mrYk="; - } - { - url = "https://st.suckless.org/patches/sync/st-appsync-20200618-b27a383.diff"; - sha256 = "sha256-lys7/nup7a+GcmW+CutX0kjmbbOis2stkuhw02beuPs="; - } - { - url = "https://st.suckless.org/patches/fix_keyboard_input/st-fix-keyboard-input-20180605-dc3b5ba.diff"; - sha256 = "sha256-h5ZrCj4IrkMQanLSMmgXaRd7qZYqvbzqUnuFt/axsMI="; - } - { - url = "https://st.suckless.org/patches/boxdraw/st-boxdraw_v2-0.8.5.diff"; - sha256 = "sha256-WN/R6dPuw1eviHOvVVBw2VBSMDtfi1LCkXyX36EJKi4="; - } - # { - # url = "https://st.suckless.org/patches/themed_cursor/st-themed_cursor-0.8.1.diff"; - # sha256 = "sha256-Q/6VN9oCrdJiZPPjKMpw3UB09tIs4eJ1Hi5c8k7O7uo="; - # } - ]; - - postPatch = oldAttrs.postPatch or "" + '' - sed -i 's/Button4, *kscrollup, *{.i = 1}/Button4, kscrollup, {.i = 10}/g' config.def.h - sed -i 's/Button5, *kscrolldown, *{.i = 1}/Button5, kscrolldown, {.i = 10}/g' config.def.h - - sed -i 's/const int boxdraw = 0;/const int boxdraw = 1;/g' config.def.h - sed -i 's/const int boxdraw_bold = 0;/const int boxdraw_bold = 1;/g' config.def.h - - grep -q Xcursor x.c || sed -i '/#include /a #include ' x.c - - sed -i 's/XCreateFontCursor/XcursorLibraryLoadCursor/g' x.c - - sed -i 's/static unsigned int mouseshape/static char *mouseshape/' config.def.h - sed -i 's/XC_xterm/"ibeam"/' config.def.h - - sed -i 's/-lXft/-lXft -lXcursor/g' config.mk - ''; - }); -in -{ - imports = [ - (import ./picom.nix homeManager) - (import ./scripts.nix homeManager) - ]; - - options.${moduleNameSpace}.dwm = { - enable = lib.mkEnableOption "dwm setup"; - picom = { - enable = lib.mkEnableOption "enable picom compositor"; - animations = lib.mkEnableOption "enable animations"; - shadow = lib.mkEnableOption "enable shadows"; - window = { - opacity = { - active = lib.mkOption { - type = lib.types.float; - default = 1.0; - }; - inactive = lib.mkOption { - type = lib.types.float; - default = 1.0; - }; - }; - blur = { - enable = lib.mkEnableOption "Enable window blur"; - strength = lib.mkOption { - type = lib.types.int; - default = 1; - }; - size = lib.mkOption { - type = lib.types.int; - default = 10; - }; - }; - }; - }; - }; - - config = lib.mkIf cfg.enable ( - if !homeManager then - { - services.xserver = { - enable = true; - windowManager.dwm = { - enable = true; - package = inputs.mydwm.packages.${pkgs.stdenv.hostPlatform.system}.default; - }; - autoRepeatDelay = 300; - autoRepeatInterval = 20; - excludePackages = with pkgs; [ xterm ]; - displayManager.sessionCommands = '' - ${pkgs.systemd}/bin/systemctl --user import-environment DISPLAY XAUTHORITY XDG_SESSION_TYPE - ${pkgs.dbus}/bin/dbus-update-activation-environment --systemd DISPLAY XAUTHORITY XDG_SESSION_TYPE - ''; - }; - - programs.ssh.askPassword = ""; - } - else - { - xdg.dataFile."dwm/autostart.sh" = { - executable = true; - text = '' - #!${pkgs.bash}/bin/bash - - gnome-keyring-daemon --start --components=secrets,ssh,pkcs11 & - ${pkgs.polkit_gnome}/libexec/polkit-gnome-authentication-agent-1 & - - [ -f ~/.Xresources ] && xrdb -merge ~/.Xresources - - dunst & - clipcatd & - slstatus & - sync_dms - ${lib.optionalString (!cfg.picom.enable) '' - xrandr --output eDP --set TearFree on - ''} - ${lib.optionalString (cfg.picom.enable) '' - systemctl --user restart picom.service - ''} - - systemctl --user restart xidlehook.service xautolock-session.service xss-lock.service clipcat.service - ''; - }; - - home.packages = with pkgs; [ - st-patched - xdotool - xclip - (pkgs.dmenu.overrideAttrs (oldAttrs: { - patches = (oldAttrs.patches or [ ]) ++ [ - (pkgs.fetchpatch { - url = "https://tools.suckless.org/dmenu/patches/xresources/dmenu-xresources-4.9.diff"; - sha256 = "sha256-Np9I8hhnwmGA3W5v4tSrBN9Or8Q2Ag9x8H3yf8L9jDI="; - }) - ]; - })) - ]; - - services.clipcat = { - enable = false; - daemonSettings = { - daemonize = false; - max_history = 50; - desktop_notification = { - enable = false; - }; - }; - menuSettings = { - server_endpoint = "/run/user/1000/clipcat/grpc.sock"; - finder = "rofi"; - - rofi = { - menu_length = 10; - line_length = 100; - menu_prompt = "Clipboard"; - extra_arguments = [ ]; - }; - }; - }; - - systemd.user.services.clipcat = { - Unit = { - ConditionEnvironment = [ "XDG_SESSION_TYPE=x11" ]; - }; - }; - - xresources.extraConfig = lib.mkIf config.beeMods.matugen.enable '' - #include "${config.xdg.configHome}/x11/matugen.Xresources" - ''; - - xresources.properties = { - "Xft.dpi" = 96; - "Xft.autohint" = 0; - "Xft.antialias" = true; - "Xft.hinting" = true; - "Xft.lcdfilter" = "lcddefault"; - "Xft.hintstyle" = "hintfull"; - "Xft.rgba" = "rgb"; - "st.font" = - "${config.beeMods.terminal.font.family}:size=${toString config.beeMods.terminal.font.size}:antialias=true:autohint=true"; - "dmenu.font" = - "${config.beeMods.terminal.font.family}:size=${toString config.beeMods.terminal.font.size}"; - "st.borderpx" = 5; - }; - } - ); -} diff --git a/common/modules/dwm/picom.nix b/common/modules/dwm/picom.nix deleted file mode 100644 index 93d4b9b..0000000 --- a/common/modules/dwm/picom.nix +++ /dev/null @@ -1,63 +0,0 @@ -homeManager: -{ config, lib, ... }: -let - cfg = config.beeMods.dwm.picom; -in -{ - config = lib.mkIf cfg.enable ( - lib.optionalAttrs homeManager { - services.picom = { - enable = true; - backend = "glx"; - vSync = true; - - activeOpacity = if cfg.window.blur.enable then 0.82 else cfg.window.opacity.active; - inactiveOpacity = if cfg.window.blur.enable then 0.82 else cfg.window.opacity.inactive; - - opacityRules = [ - "100:fullscreen" - "100:_NET_WM_STATE@:32a *= '_NET_WM_STATE_FULLSCREEN'" - ]; - settings = { - blur = { - method = "dual_kawase"; - strength = cfg.window.blur.strength; - size = cfg.window.blur.size; - }; - blur-background = cfg.window.blur.enable; - blur-background-exclude = [ - "window_type = 'dock'" - "window_type = 'desktop'" - "class_g = 'slop'" - "class_g = 'dwm'" - "_GTK_FRAME_EXTENTS@" - "fullscreen" - "_NET_WM_STATE@:32a *= '_NET_WM_STATE_FULLSCREEN'" - ]; - - # xrender-sync-fence = true; - use-damage = true; - - unredir-if-possible = true; - - detect-transient = true; - detect-client-opacity = true; - mark-wmwin-focused = true; - mark-ovredir-focused = true; - detect-rounded-corners = true; - - shadow = cfg.shadow; - fading = false; - animations = cfg.animations; - }; - }; - - # systemd.user.services.picom.Install.wantedBy = lib.mkForce [ ]; - systemd.user.services.picom = { - Unit = { - ConditionEnvironment = "XDG_SESSION_TYPE=x11"; - }; - }; - } - ); -} diff --git a/common/modules/dwm/scripts.nix b/common/modules/dwm/scripts.nix deleted file mode 100644 index 5b52686..0000000 --- a/common/modules/dwm/scripts.nix +++ /dev/null @@ -1,78 +0,0 @@ -homeManager: -{ pkgs, lib, ... }: -let - sync_dms = pkgs.writeShellScriptBin "sync_dms" '' - jq=${pkgs.jq}/bin/jq - CONFIG_FILE=$HOME/.local/state/DankMaterialShell/session.json - - get_val() { $jq -r ".$1" "$CONFIG_FILE"; } - set_val() { - local tmp=$(mktemp) - $jq --arg val "$2" ".$1 = \$val" "$CONFIG_FILE" > "$tmp" && mv "$tmp" "$CONFIG_FILE" - } - - - function sync_all { - ISNIGHTMODE=$(get_val "nightModeEnabled") - NIGHTMODETEMP=$(get_val "nightModeTemperature") - WALL=$(get_val "wallpaperPath") - ${pkgs.xwallpaper}/bin/xwallpaper --zoom "$WALL" - - if [[ "$ISNIGHTMODE" == "true" ]]; then - echo "bitch $ISNIGHTMODE" - ${pkgs.redshift}/bin/redshift -o "$NIGHTMODETEMP" - else - ${pkgs.redshift}/bin/redshift -x - fi - } - - function dmenu_settings { - ISNIGHTMODE=$(get_val "nightModeEnabled") - options="NightMode (Currently $ISNIGHTMODE)\nSync Now" - - choice=$(echo -e "$options" | dmenu -p "Settings:") - - case "$choice" in - *"NightMode"*) - if [[ "$ISNIGHTMODE" == "true" ]]; then - set_val "nightModeEnabled" "false" - else - set_val "nightModeEnabled" "true" - fi - sync_all - ;; - "Sync Now") - sync_all - ;; - esac - } - - case "$1" in - settings) dmenu_settings ;; - *) sync_all ;; - esac - ''; - logout_dmenu = pkgs.writeShellScriptBin "logout_dmenu" '' - options="Lock\nLogout\nReboot\nShutdown" - - choice=$(echo -e "$options" | dmenu -p "System:") - - case "$choice" in - Lock) slock ;; - Logout) pkill dwm ;; - Reboot) reboot ;; - Shutdown) poweroff ;; - *) exit 1 ;; - esac - ''; -in -{ - config = lib.mkIf homeManager ( - lib.optionalAttrs homeManager { - home.packages = with pkgs; [ - sync_dms - logout_dmenu - ]; - } - ); -} diff --git a/common/modules/emacs/default.nix b/common/modules/emacs/default.nix new file mode 100644 index 0000000..4566f57 --- /dev/null +++ b/common/modules/emacs/default.nix @@ -0,0 +1,33 @@ +{ + homeManager, + inputs, + moduleNameSpace, + ... +}: +{ + pkgs, + config, + lib, + ... +}: +let + cfg = config.${moduleNameSpace}.emacs; +in +{ + imports = lib.optionals homeManager [ + inputs.nix-doom-emacs-unstraightened.homeModule + ]; + + options.${moduleNameSpace}.emacs = { + enable = lib.mkEnableOption "Enable emacs"; + }; + + config = lib.mkIf cfg.enable ( + lib.optionalAttrs homeManager { + programs.doom-emacs = { + enable = true; + doomDir = ./doom; # or e.g. `./doom.d` for a local configuration + }; + } + ); +} diff --git a/common/modules/emacs/doom/config.el b/common/modules/emacs/doom/config.el new file mode 100644 index 0000000..5308e62 --- /dev/null +++ b/common/modules/emacs/doom/config.el @@ -0,0 +1,75 @@ +;;; $DOOMDIR/config.el -*- lexical-binding: t; -*- + +;; Place your private configuration here! Remember, you do not need to run 'doom +;; sync' after modifying this file! + + +;; Some functionality uses this to identify you, e.g. GPG configuration, email +;; clients, file templates and snippets. It is optional. +;; (setq user-full-name "John Doe" +;; user-mail-address "john@doe.com") + +;; Doom exposes five (optional) variables for controlling fonts in Doom: +;; +;; - `doom-font' -- the primary font to use +;; - `doom-variable-pitch-font' -- a non-monospace font (where applicable) +;; - `doom-big-font' -- used for `doom-big-font-mode'; use this for +;; presentations or streaming. +;; - `doom-symbol-font' -- for symbols +;; - `doom-serif-font' -- for the `fixed-pitch-serif' face +;; +;; See 'C-h v doom-font' for documentation and more examples of what they +;; accept. For example: +;; +(setq doom-font (font-spec :family "IosevkaInput" :size 14 :weight 'semi-light) + doom-variable-pitch-font (font-spec :family "IosevkaInput" :size 15)) +;; +;; If you or Emacs can't find your font, use 'M-x describe-font' to look them +;; up, `M-x eval-region' to execute elisp code, and 'M-x doom/reload-font' to +;; refresh your font settings. If Emacs still can't find your font, it likely +;; wasn't installed correctly. Font issues are rarely Doom issues! + +;; There are two ways to load a theme. Both assume the theme is installed and +;; available. You can either set `doom-theme' or manually load a theme with the +;; `load-theme' function. This is the default: +(setq doom-theme 'doom-one) + +;; This determines the style of line numbers in effect. If set to `nil', line +;; numbers are disabled. For relative line numbers, set this to `relative'. +(setq display-line-numbers-type t) + +;; If you use `org' and don't want your org files in the default location below, +;; change `org-directory'. It must be set before org loads! +(setq org-directory "~/org/") + + +;; Whenever you reconfigure a package, make sure to wrap your config in an +;; `with-eval-after-load' block, otherwise Doom's defaults may override your +;; settings. E.g. +;; +;; (with-eval-after-load 'PACKAGE +;; (setq x y)) +;; +;; The exceptions to this rule: +;; +;; - Setting file/directory variables (like `org-directory') +;; - Setting variables which explicitly tell you to set them before their +;; package is loaded (see 'C-h v VARIABLE' to look them up). +;; - Setting doom variables (which start with 'doom-' or '+'). +;; +;; Here are some additional functions/macros that will help you configure Doom. +;; +;; - `load!' for loading external *.el files relative to this one +;; - `add-load-path!' for adding directories to the `load-path', relative to +;; this file. Emacs searches the `load-path' when you load packages with +;; `require' or `use-package'. +;; - `map!' for binding new keys +;; +;; To get information about any of these functions/macros, move the cursor over +;; the highlighted symbol at press 'K' (non-evil users must press 'C-c c k'). +;; This will open documentation for it, including demos of how they are used. +;; Alternatively, use `C-h o' to look up a symbol (functions, variables, faces, +;; etc). +;; +;; You can also try 'gd' (or 'C-c c d') to jump to their definition and see how +;; they are implemented. diff --git a/common/modules/emacs/doom/init.el b/common/modules/emacs/doom/init.el new file mode 100644 index 0000000..34d9172 --- /dev/null +++ b/common/modules/emacs/doom/init.el @@ -0,0 +1,199 @@ +;;; init.el -*- lexical-binding: t; -*- + +;; This file controls what Doom modules are enabled and what order they load +;; in. Remember to run 'doom sync' after modifying it! + +;; NOTE: Press 'SPC h d h' (or 'C-h d h' for non-vim users) to access Doom's +;; documentation. There you'll find a link to Doom's Module Index where all of +;; our modules are listed, including what flags they support. + +;; NOTE: Move your cursor over a module's name (or its flags) and press 'K' (or +;; 'C-c c k' for non-vim users) to view its documentation. This works on flags +;; as well (those symbols that start with a plus). +;; +;; Alternatively, press 'gd' (or 'C-c c d') on a module to browse its +;; directory (for easy access to its source code). + +(doom! :input + ;;bidi ; (tfel ot) thgir etirw uoy gnipleh + ;;chinese + ;;japanese + ;;layout ; auie,ctsrnm is the superior home row + + :completion + ;;company ; the ultimate code completion backend + (corfu +orderless) ; complete with cap(f), cape and a flying feather! + ;;helm ; the *other* search engine for love and life + ;;ido ; the other *other* search engine... + ;;ivy ; a search engine for love and life + vertico ; the search engine of the future + + :ui + ;;deft ; notational velocity for Emacs + doom ; what makes DOOM look the way it does + dashboard ; a nifty splash screen for Emacs + ;;doom-quit ; DOOM quit-message prompts when you quit Emacs + ;;(emoji +unicode) ; 🙂 + hl-todo ; highlight TODO/FIXME/NOTE/DEPRECATED/HACK/REVIEW + ;;indent-guides ; highlighted indent columns + ;;ligatures ; ligatures and symbols to make your code pretty again + ;;minimap ; show a map of the code on the side + modeline ; snazzy, Atom-inspired modeline, plus API + ;;nav-flash ; blink cursor line after big motions + ;;neotree ; a project drawer, like NERDTree for vim + ophints ; highlight the region an operation acts on + (popup +defaults) ; tame sudden yet inevitable temporary windows + ;;smooth-scroll ; So smooth you won't believe it's not butter + ;;tabs ; a tab bar for Emacs + ;;treemacs ; a project drawer, like neotree but cooler + ;;unicode ; extended unicode support for various languages + (vc-gutter +pretty) ; vcs diff in the fringe + vi-tilde-fringe ; fringe tildes to mark beyond EOB + ;;window-select ; visually switch windows + workspaces ; tab emulation, persistence & separate workspaces + ;;zen ; distraction-free coding or writing + + :editor + (evil +everywhere); come to the dark side, we have cookies + file-templates ; auto-snippets for empty files + fold ; (nigh) universal code folding + ;;(format +onsave) ; automated prettiness + ;;god ; run Emacs commands without modifier keys + ;;lispy ; vim for lisp, for people who don't like vim + ;;multiple-cursors ; editing in many places at once + ;;objed ; text object editing for the innocent + ;;parinfer ; turn lisp into python, sort of + ;;rotate-text ; cycle region at point between text candidates + snippets ; my elves. They type so I don't have to + (whitespace +guess +trim) ; a butler for your whitespace + ;;word-wrap ; soft wrapping with language-aware indent + + :emacs + dired ; making dired pretty [functional] + electric ; smarter, keyword-based electric-indent + ;;eww ; the internet is gross + ;;ibuffer ; interactive buffer management + tramp ; remote files at your arthritic fingertips + undo ; persistent, smarter undo for your inevitable mistakes + vc ; version-control and Emacs, sitting in a tree + + :term + ;;eshell ; the elisp shell that works everywhere + ;;shell ; simple shell REPL for Emacs + ;;term ; basic terminal emulator for Emacs + ;;vterm ; the best terminal emulation in Emacs + + :checkers + syntax ; tasing you for every semicolon you forget + ;;(spell +flyspell) ; tasing you for misspelling mispelling + ;;grammar ; tasing grammar mistake every you make + + :tools + ;;ansible + ;;biblio ; Writes a PhD for you (citation needed) + ;;collab ; buffers with friends + ;;debugger ; stepping through code, to help you add bugs + ;;direnv + ;;docker + ;;editorconfig ; let someone else argue about tabs vs spaces + ;;ein ; tame Jupyter notebooks with emacs + (eval +overlay) ; run code, run (also, repls) + lookup ; navigate your code and its documentation + ;;llm ; when I said you needed friends, I didn't mean... + (lsp +eglot) ; M-x vscode + magit ; a git porcelain for Emacs + ;;make ; run make tasks from Emacs + ;;pass ; password manager for nerds + ;;pdf ; pdf enhancements + ;;terraform ; infrastructure as code + ;;tmux ; an API for interacting with tmux + tree-sitter ; syntax and parsing, sitting in a tree... + ;;upload ; map local to remote projects via ssh/ftp + + :os + (:if (featurep :system 'macos) macos) ; improve compatibility with macOS + ;;tty ; improve the terminal Emacs experience + + :lang + ;;ada ; In strong typing we (blindly) trust + ;;(agda +local) ; types of types of types of types... + ;;beancount ; mind the GAAP + (cc +lsp) ; C > C++ == 1 + ;;clojure ; java with a lisp + ;;common-lisp ; if you've seen one lisp, you've seen them all + ;;coq ; proofs-as-programs + ;;crystal ; ruby at the speed of c + ;;csharp ; unity, .NET, and mono shenanigans + ;;data ; config/data formats + ;;(dart +flutter) ; paint ui and not much else + ;;dhall + ;;elixir ; erlang done right + ;;elm ; care for a cup of TEA? + emacs-lisp ; drown in parentheses + ;;erlang ; an elegant language for a more civilized age + ;;ess ; emacs speaks statistics + ;;factor + ;;faust ; dsp, but you get to keep your soul + ;;fortran ; in FORTRAN, GOD is REAL (unless declared INTEGER) + ;;fsharp ; ML stands for Microsoft's Language + ;;fstar ; (dependent) types and (monadic) effects and Z3 + ;;gdscript ; the language you waited for + ;;(go +lsp) ; the hipster dialect + ;;(graphql +lsp) ; Give queries a REST + ;;(haskell +lsp) ; a language that's lazier than I am + ;;hy ; readability of scheme w/ speed of python + ;;idris ; a language you can depend on + ;;json ; At least it ain't XML + ;;janet ; Fun fact: Janet is me! + ;;(java +lsp) ; the poster child for carpal tunnel syndrome + ;;javascript ; all(hope(abandon(ye(who(enter(here)))))) + ;;julia ; a better, faster MATLAB + ;;kotlin ; a better, slicker Java(Script) + ;;latex ; writing papers in Emacs has never been so fun + ;;lean ; for folks with too much to prove + ;;ledger ; be audit you can be + ;;lua ; one-based indices? one-based indices + markdown ; writing docs for people to ignore + ;;nim ; python + lisp at the speed of c + nix ; I hereby declare "nix geht mehr!" + ;;ocaml ; an objective camel + ;;odin ; C, minus its footguns + org ; organize your plain life in plain text + ;;php ; perl's insecure younger brother + ;;plantuml ; diagrams for confusing people more + ;;graphviz ; diagrams for confusing yourself even more + ;;purescript ; javascript, but functional + ;;python ; beautiful is better than ugly + ;;qt ; the 'cutest' gui framework ever + ;;racket ; a DSL for DSLs + ;;raku ; the artist formerly known as perl6 + ;;rest ; Emacs as a REST client + ;;rst ; ReST in peace + ;;(ruby +rails) ; 1.step {|i| p "Ruby is #{i.even? ? 'love' : 'life'}"} + (rust +lsp) ; Fe2O3.unwrap().unwrap().unwrap().unwrap() + ;;scala ; java, but good + ;;(scheme +guile) ; a fully conniving family of lisps + sh ; she sells {ba,z,fi}sh shells on the C xor + ;;sml + ;;solidity ; do you need a blockchain? No. + ;;swift ; who asked for emoji variables? + ;;terra ; Earth and Moon in alignment for performance. + ;;web ; the tubes + ;;yaml ; JSON, but readable + zig ; C, but simpler + + :email + ;;(mu4e +org +gmail) + ;;notmuch + ;;(wanderlust +gmail) + + :app + ;;calendar + ;;emms + ;;everywhere ; *leave* Emacs!? You must be joking + ;;irc ; how neckbeards socialize + ;;(rss +org) ; emacs as an RSS reader + + :config + ;;literate + (default +bindings +smartparens)) diff --git a/common/modules/emacs/doom/packages.el b/common/modules/emacs/doom/packages.el new file mode 100644 index 0000000..d2680fe --- /dev/null +++ b/common/modules/emacs/doom/packages.el @@ -0,0 +1,54 @@ +;; -*- no-byte-compile: t; -*- +;;; $DOOMDIR/packages.el + +;; To install a package: +;; +;; 1. Declare them here in a `package!' statement, +;; 2. Run 'doom sync' in the shell, +;; 3. Restart Emacs. +;; +;; Use 'C-h f package\!' to look up documentation for the `package!' macro. + + +;; To install SOME-PACKAGE from MELPA, ELPA or emacsmirror: +;; (package! some-package) + +;; To install a package directly from a remote git repo, you must specify a +;; `:recipe'. You'll find documentation on what `:recipe' accepts here: +;; https://github.com/radian-software/straight.el#the-recipe-format +;; (package! another-package +;; :recipe (:host github :repo "username/repo")) + +;; If the package you are trying to install does not contain a PACKAGENAME.el +;; file, or is located in a subdirectory of the repo, you'll need to specify +;; `:files' in the `:recipe': +;; (package! this-package +;; :recipe (:host github :repo "username/repo" +;; :files ("some-file.el" "src/lisp/*.el"))) + +;; If you'd like to disable a package included with Doom, you can do so here +;; with the `:disable' property: +;; (package! builtin-package :disable t) + +;; You can override the recipe of a built in package without having to specify +;; all the properties for `:recipe'. These will inherit the rest of its recipe +;; from Doom or MELPA/ELPA/Emacsmirror: +;; (package! builtin-package :recipe (:nonrecursive t)) +;; (package! builtin-package-2 :recipe (:repo "myfork/package")) + +;; Specify a `:branch' to install a package from a particular branch or tag. +;; This is required for some packages whose default branch isn't 'master' (which +;; our package manager can't deal with; see radian-software/straight.el#279) +;; (package! builtin-package :recipe (:branch "develop")) + +;; Use `:pin' to specify a particular commit to install. +;; (package! builtin-package :pin "1a2b3c4d5e") + + +;; Doom's packages are pinned to a specific commit and updated from release to +;; release. The `unpin!' macro allows you to unpin single packages... +;; (unpin! pinned-package) +;; ...or multiple packages +;; (unpin! pinned-package another-pinned-package) +;; ...Or *all* packages (NOT RECOMMENDED; will likely break things) +;; (unpin! t) diff --git a/common/modules/hyprland/default.nix b/common/modules/hyprland/default.nix deleted file mode 100644 index d230ac0..0000000 --- a/common/modules/hyprland/default.nix +++ /dev/null @@ -1,380 +0,0 @@ -{ - homeManager, - inputs, - moduleNameSpace, - ... -}: -{ - config, - lib, - pkgs, - ... -}: -let - cfg = config.${moduleNameSpace}.hyprland; - - snip = pkgs.writeShellScript "snip" '' - case $1 in - full) - ${pkgs.grim}/bin/grim - | wl-copy - ;; - selection) - GEOM=$(${pkgs.slurp}/bin/slurp) || exit - ${pkgs.grim}/bin/grim -g "$GEOM" - | wl-copy - ;; - window) - GEOM=$(hyprctl activewindow -j | ${pkgs.jq}/bin/jq -r '"\(.at[0]),\(.at[1]) \(.size[0])x\(.size[1])"') - ${pkgs.grim}/bin/grim -g "$GEOM" - | wl-copy - ;; - esac - ''; - - smart-alacritty = pkgs.writeShellScript "smart-alacritty" '' - alacritty msg create-window || exec alacritty - ''; - - smart-ghostty = pkgs.writeShellScript "smart-ghostty" '' - ghostty +new-window || exec ghostty - ''; - - terminal = - if config.beeMods.terminal.default == "alacritty" then - smart-alacritty - else if config.beeMods.terminal.default == "ghostty" then - smart-ghostty - else - config.beeMods.terminal.default; - - settings-persist = pkgs.writeShellScript "settings-persist" '' - SETTINGS_FILE="$HOME/.config/beeSettings" - - if [[ -f "$SETTINGS_FILE" ]]; then - IS_NIGHTMODE=$(${pkgs.ripgrep}/bin/rg "nightlight" "$SETTINGS_FILE" | cut -d"=" -f2) - - if [[ "$IS_NIGHTMODE" == "on" ]]; then - ${pkgs.wlsunset}/bin/wlsunset -T 4500 & - fi - fi - ''; -in -{ - options.${moduleNameSpace}.hyprland = { - enable = lib.mkEnableOption "hyprland setup"; - animations = lib.mkEnableOption "Uiiiiiiiiiii"; - window = { - blur = { - enable = lib.mkEnableOption "Enable window blur"; - passes = lib.mkOption { - type = lib.types.int; - default = 1; - }; - radius = lib.mkOption { - type = lib.types.int; - default = 10; - }; - }; - shadows = lib.mkEnableOption "Enable window drop shadows"; - border_radius = lib.mkOption { - type = lib.types.int; - default = 0; - description = "Border radius"; - }; - opacity = lib.mkOption { - type = lib.types.number; - default = 1.0; - description = "Window opacity"; - }; - }; - }; - - config = lib.mkIf cfg.enable ( - if homeManager then - { - wayland.windowManager.hyprland = { - enable = true; - systemd.enable = true; - systemd.variables = [ "--all" ]; - xwayland.enable = true; - systemd.enableXdgAutostart = false; - - settings = { - monitor = [ ",1920x1080@120,auto,1.0" ]; - - # Conditionally load matugen colors if enabled - # source = [ ] ++ lib.optional (config.beeMods.matugen.enable) "~/.config/hypr/hyprland-colors.conf"; - - "$mainMod" = "SUPER"; - - # env = [ - # "NIXOS_OZONE_WL,1" - # "QT_AUTO_SCREEN_SCALE_FACTOR,1" - # "ELECTRON_OZONE_PLATFORM_HINT,auto" - # "QT_QPA_PLATFORM,wayland;xcb" - # "XDG_SESSION_TYPE,wayland" - # "GDK_BACKEND,wayland,x11" - # "GDK_SCALE,1" - # ]; - # - exec-once = [ - "wl-clip-persist --clipboard regular --reconnect-tries 0" - "wl-paste --type text --watch cliphist store" - "${pkgs.polkit_gnome}/libexec/polkit-gnome-authentication-agent-1" - "gnome-keyring-daemon --start --components=secrets,ssh,pkcs11" - "${settings-persist}" - "dbus-update-activation-environment --all" - "sleep 1 && dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP" - ] - ++ lib.optionals (config.beeMods.x11.dwm.enable || config.beeMods.x11.bspwm.enable) [ - "systemctl --user stop xidlehook.service" - "systemctl --user stop xautolock-session.service" - "systemctl --user stop xss-lock.service" - "systemctl --user stop clipcat.service" - ] - ++ lib.optionals (config.beeMods.x11.picom.enable) [ - "systemctl --user stop picom.service" - ]; - - xwayland = { - force_zero_scaling = true; - }; - - input = { - follow_mouse = 1; - kb_layout = "us"; - repeat_delay = 300; - repeat_rate = 50; - sensitivity = 0; - numlock_by_default = false; - left_handed = false; - - touchpad = { - natural_scroll = true; - tap-to-click = true; - drag_lock = true; - disable_while_typing = true; - middle_button_emulation = false; - }; - }; - - general = { - layout = "master"; - gaps_in = 5; - gaps_out = 5; - border_size = 2; - - resize_on_border = true; - no_focus_fallback = true; - allow_tearing = false; - - # "col.active_border" = "$_tertiary_fixed_dim"; - # "col.inactive_border" = "$_outline"; - }; - - master = { - allow_small_split = true; - new_on_top = false; - mfact = 0.56; - }; - - scrolling = { - column_width = 0.55; - follow_focus = true; - }; - - decoration = { - rounding = cfg.window.border_radius; - - blur = { - enabled = cfg.window.blur.enable; - size = cfg.window.blur.radius; - passes = cfg.window.blur.passes; - brightness = 0.9; - contrast = 0.9; - noise = 0.02; - vibrancy = 1.2; - popups = true; - popups_ignorealpha = 0.6; - }; - - shadow = { - enabled = cfg.window.shadows; - ignore_window = true; - range = 10; - render_power = 3; - offset = "0 0"; - color = "rgba(00000044)"; - }; - - # Apply opacity logic utilizing cfg options - active_opacity = - if (cfg.window.blur.enable && cfg.window.opacity == 1.0) then 0.82 else cfg.window.opacity; - inactive_opacity = - if (cfg.window.blur.enable && cfg.window.opacity == 1.0) then 0.82 else cfg.window.opacity; - fullscreen_opacity = 1.0; - - dim_inactive = false; - }; - - animations = { - enabled = true; - - bezier = [ - "openCurve, 0.05, 0.7, 0.1, 1.0" - "closeCurve, 0.0, 0.0, 1.0, 1.0" - "moveCurve, 0.46, 1.0, 0.29, 1.0" - ]; - - animation = [ - "windowsIn, 1, 2.8, openCurve, slide" - "windowsOut, 1, 6.5, closeCurve, popin 80%" - "windowsMove, 1, 2.2, moveCurve" - "fadeIn, 0, 3.0, fadeCurve" - "fadeOut, 1, 2.5, moveCurve" - "workspaces, 1, 2.5, moveCurve, slide" - ]; - }; - - misc = { - vfr = true; - vrr = 0; - mouse_move_enables_dpms = true; - key_press_enables_dpms = true; - disable_splash_rendering = true; - animate_manual_resizes = true; - animate_mouse_windowdragging = false; - enable_swallow = false; - swallow_regex = "(foot|kitty|alacritty|Alacritty|com.mitchellh.ghostty|)"; - disable_hyprland_logo = true; - force_default_wallpaper = 0; - focus_on_activate = true; - }; - - binds = { - scroll_event_delay = 0; - focus_preferred_method = 1; - }; - - windowrule = [ - "workspace 1, match:class ^(foot|footclient|alacritty|com.mitchellh.ghostty)$" - "workspace 2, match:class ^(zen|firefox|obsidian)$" - "workspace 3, match:class ^(vesktop|discord|thunderbird|Element|equibop)$" - "workspace 4, match:class ^(steam)$" - "float on, match:class ^(org.gnome.Calculator|org.pulseaudio.pavucontrol)$" - "stay_focused on, match:class ^(pinentry-)(.*)$" - ]; - - layerrule = [ - "no_anim on, match:namespace ^rofi$" - ]; - - workspace = [ "2, layout:scrolling" ]; - - bind = [ - "$mainMod, r, exec, hyprctl reload" - "$mainMod, Return, exec, ${terminal}" - "$mainMod, a, exec, rofi -show drun" - "$mainMod, period, exec, rofi -show emoji -modi emoji" - "ALT, F4, exec, rofi -show power-menu -modi power-menu:rofi-power-menu" - "$mainMod, y, exec, beesettings wall" - "$mainMod, comma, exec, beesettings settings" - - "$mainMod, F12, exec, gnome-calculator" - "$mainMod, b, exec, zen" - "$mainMod, e, exec, nautilus" - - "$mainMod, m, exit," - "$mainMod, q, killactive," - - "$mainMod, h, movefocus, l" - "$mainMod, l, movefocus, r" - "$mainMod, k, movefocus, u" - "$mainMod, j, movefocus, d" - - ", Print, exec, ${snip} full" - "$mainMod, Print, exec, ${snip} selection" - "$mainMod SHIFT, Print, exec, ${snip} window" - - "$mainMod SHIFT, k, swapwindow, u" - "$mainMod SHIFT, j, swapwindow, d" - "$mainMod SHIFT, h, swapwindow, l" - "$mainMod SHIFT, l, swapwindow, r" - - "$mainMod, g, pin," - "ALT, Tab, workspace, previous" - "$mainMod, space, togglefloating," - "ALT, a, fullscreen, 1" - "ALT, f, fullscreen, 0" - "$mainMod, i, togglespecialworkspace, minimized" - "$mainMod, i, movetoworkspacesilent, special:minimized" - "$mainMod SHIFT, i, togglespecialworkspace, minimized" - "$mainMod SHIFT, i, movetoworkspace, +0" - "ALT, z, togglespecialworkspace, scratchpad" - - "$mainMod, n, exec, beesettings layout" - - "$mainMod, 1, workspace, 1" - "$mainMod, 2, workspace, 2" - "$mainMod, 3, workspace, 3" - "$mainMod, 4, workspace, 4" - "$mainMod, 5, workspace, 5" - "$mainMod, 6, workspace, 6" - "$mainMod, 7, workspace, 7" - "$mainMod, 8, workspace, 8" - "$mainMod, 9, workspace, 9" - - "$mainMod SHIFT, 1, movetoworkspace, 1" - "$mainMod SHIFT, 2, movetoworkspace, 2" - "$mainMod SHIFT, 3, movetoworkspace, 3" - "$mainMod SHIFT, 4, movetoworkspace, 4" - "$mainMod SHIFT, 5, movetoworkspace, 5" - "$mainMod SHIFT, 6, movetoworkspace, 6" - "$mainMod SHIFT, 7, movetoworkspace, 7" - "$mainMod SHIFT, 8, movetoworkspace, 8" - "$mainMod SHIFT, 9, movetoworkspace, 9" - - "ALT SHIFT, Left, focusmonitor, l" - "ALT SHIFT, Right, focusmonitor, r" - "$mainMod ALT, Left, movecurrentworkspacetomonitor, l" - "$mainMod ALT, Right, movecurrentworkspacetomonitor, r" - ]; - - binde = [ - "$mainMod, Up, moveactive, 0 -50" - "$mainMod, Down, moveactive, 0 50" - "$mainMod, Left, moveactive, -50 0" - "$mainMod, Right, moveactive, 50 0" - - "ALT, k, resizeactive, 0 -50" - "ALT, j, resizeactive, 0 50" - "ALT, h, resizeactive, -50 0" - "ALT, l, resizeactive, 50 0" - ]; - - bindel = [ - ", XF86AudioRaiseVolume, exec, volume-control up" - ", XF86AudioLowerVolume, exec, volume-control down" - ", XF86AudioMute, exec, volume-control mute" - ", XF86AudioMicMute, exec, mic-control toggle" - - ", XF86AudioPlay, exec, playerctl play-pause" - ", XF86AudioNext, exec, playerctl next" - ", XF86AudioPrev, exec, playerctl previous" - ", XF86AudioStop, exec, playerctl stop" - - ", XF86MonBrightnessUp, exec, brightness-control up" - ", XF86MonBrightnessDown, exec, brightness-control down" - ]; - - bindm = [ - "$mainMod, mouse:272, movewindow" - "$mainMod, mouse:273, resizewindow" - ]; - }; - }; - } - else - { - programs.hyprland.enable = true; - } - ); -} diff --git a/common/modules/mango/default.nix b/common/modules/mango/default.nix deleted file mode 100644 index 7938c05..0000000 --- a/common/modules/mango/default.nix +++ /dev/null @@ -1,416 +0,0 @@ -{ - homeManager, - inputs, - moduleNameSpace, - ... -}: -{ - config, - lib, - pkgs, - ... -}: -let - cfg = config.${moduleNameSpace}.mango; - snip = pkgs.writeShellScript "snip" '' - case $1 in - full) - ${pkgs.grim}/bin/grim - | wl-copy - ;; - selection) - GEOM=$(${pkgs.slurp}/bin/slurp) || exit - ${pkgs.grim}/bin/grim -g "$GEOM" - | wl-copy - ;; - window) - ${pkgs.grim}/bin/grim -g "$(mmsg -x | awk ' - / x / {x=$3} - / y / {y=$3} - / width / {w=$3} - / height / {h=$3} - END {print x "," y " " w "x" h} - ')" - | wl-copy - ;; - esac - ''; - smart-alacritty = pkgs.writeShellScript "smart-alacritty" '' - alacritty msg create-window || exec alacritty - ''; - smart-ghostty = pkgs.writeShellScript "smart-ghostty" '' - ghostty +new-window || exec ghostty - ''; - terminal = - if config.beeMods.terminal.default == "alacritty" then - smart-alacritty - else if config.beeMods.terminal.default == "ghostty" then - smart-ghostty - else - config.beeMods.terminal.default; -in -{ - imports = - if homeManager then [ inputs.mango.hmModules.mango ] else [ inputs.mango.nixosModules.mango ]; - - options.${moduleNameSpace}.mango = { - enable = lib.mkEnableOption "mango setup"; - animations = lib.mkEnableOption "Uiiiiiiiiiii"; - waybar = lib.mkEnableOption "Enable waybar"; - window = { - blur = { - enable = lib.mkEnableOption "Enable window blur"; - passes = lib.mkOption { - type = lib.types.int; - default = 1; - }; - radius = lib.mkOption { - type = lib.types.int; - default = 10; - }; - }; - shadows = lib.mkEnableOption "Enable window drop shadows"; - border_radius = lib.mkOption { - type = lib.types.int; - default = 0; - description = "Border radius"; - }; - opacity = lib.mkOption { - type = lib.types.number; - default = 1.0; - description = "Window opacity"; - }; - }; - }; - - config = lib.mkIf cfg.enable ( - if homeManager then - { - wayland.windowManager.mango = { - enable = true; - systemd.enable = true; - systemd.variables = [ "--all" ]; - extraConfig = '' - ${lib.optionalString (config.beeMods.matugen.enable) '' - source=~/.config/mango/mango-colors.conf - ''} - - # Window effect - blur=${if cfg.window.blur.enable then "1" else "0"} - blur_layer=0 - blur_optimized=1 - blur_params_num_passes = ${toString cfg.window.blur.passes} - blur_params_radius = ${toString cfg.window.blur.radius} - blur_params_noise = 0.02 - blur_params_brightness = 0.9 - blur_params_contrast = 0.9 - blur_params_saturation = 1.2 - - shadows=${if cfg.window.shadows then "1" else "0"} - layer_shadows = 0 - shadow_only_floating = 1 - shadows_size = 10 - shadows_blur = 15 - shadows_position_x = 0 - shadows_position_y = 0 - - border_radius=${toString cfg.window.border_radius} - no_radius_when_single=0 - - ${ - if (cfg.window.blur.enable && cfg.window.opacity == 1.0) then - '' - focused_opacity=0.82 - unfocused_opacity=0.82 - '' - else - '' - focused_opacity=${toString cfg.window.opacity} - unfocused_opacity=${toString cfg.window.opacity} - '' - } - - # Animation Configuration(support type:zoom,slide) - # tag_animation_direction: 1-horizontal,0-vertical - animations=${if cfg.animations then "1" else "0"} - layer_animations=0 - animation_type_open=slide - animation_type_close=zoom - animation_fade_in=0 - animation_fade_out=1 - tag_animation_direction=1 - zoom_initial_ratio=0.8 - zoom_end_ratio=0.8 - fadein_begin_opacity=0.5 - fadeout_begin_opacity=0.5 - animation_duration_move=250 - animation_duration_open=250 - animation_duration_tag=250 - animation_duration_close=100 - animation_duration_focus=0 - animation_curve_open=0.05,0.7,0.1,1.0 - animation_curve_move=0.46,1.0,0.29,1 - animation_curve_tag=0.46,1.0,0.29,1 - animation_curve_close=0.0,0.0,1.0,1.0 - animation_curve_focus=0.05,0.7,0.1,1.0 - animation_curve_opafadeout=0.5,0.5,0.5,0.5 - animation_curve_opafadein=0.46,1.0,0.29,1 - - # Scroller configuration - scroller_structs=15 - scroller_default_proportion=0.6 - scroller_focus_center=0 - scroller_prefer_center=0 - edge_scroller_pointer_focus=1 - scroller_default_proportion_single=1.0 - scroller_ignore_proportion_single=0 - scroller_proportion_preset=0.5,0.8,1.0 - - # Master-Stack Layout Setting - new_is_master=0 - default_mfact=0.56 - default_nmaster=1 - smartgaps=0 - - # Overview Setting - hotarea_size=10 - enable_hotarea=0 - ov_tab_mode=0 - overviewgappi=5 - overviewgappo=30 - - # Misc - no_border_when_single=0 - axis_bind_apply_timeout=100 - focus_on_activate=1 - idleinhibit_ignore_visible=0 - sloppyfocus=1 - warpcursor=1 - focus_cross_monitor=0 - focus_cross_tag=0 - enable_floating_snap=0 - snap_distance=30 - # cursor_size=24 - drag_tile_to_tile=1 - xwayland_persistence=0 - syncobj_enable=0 - allow_tearing=0 - - # keyboard - repeat_delay=300; - repeat_rate=50; - numlockon=0 - xkb_rules_layout=us - - # Trackpad - # need relogin to make it apply - disable_trackpad=0 - tap_to_click=1 - tap_and_drag=1 - drag_lock=1 - trackpad_natural_scrolling=1 - disable_while_typing=1 - left_handed=0 - middle_button_emulation=0 - swipe_min_threshold=1 - - # mouse - # need relogin to make it apply - mouse_natural_scrolling=0 - - windowrule=tags:1,appid:^(foot|footclient|alacritty|dev.zed.Zed)$ - windowrule=tags:2,appid:^(zen|firefox|obsidian)$ - windowrule=tags:3,appid:^(vesktop|discord|thunderbird|Element|equibop)$ - windowrule=tags:4,appid:^steam$ - - windowrule=scroller_proportion:0.3,appid:^steam$,title:^Friends List$ - windowrule=scroller_proportion:0.5,appid:^steam$,title:.*(Settings|Properties).* - windowrule=isfloating:1,appid:^steam$,title:^Steam - News$ - windowrule=isfloating:1,appid:^(org.gnome.Calculator|org.pulseaudio.pavucontrol)$ - windowrule=isoverlay:1,appid:^com.gabm.satty$ - - # Appearance - gappih=5 - gappiv=5 - gappoh=5 - gappov=5 - scratchpad_width_ratio=0.8 - scratchpad_height_ratio=0.9 - borderpx=2 - - # layout support: - # tile,scroller,grid,deck,monocle,center_tile,vertical_tile,vertical_scroller - tagrule=id:1,layout_name:tgmix - tagrule=id:2,layout_name:scroller - tagrule=id:3,layout_name:scroller - tagrule=id:4,layout_name:scroller - tagrule=id:5,layout_name:grid - tagrule=id:6,layout_name:tile - tagrule=id:7,layout_name:tile - tagrule=id:8,layout_name:tile - tagrule=id:9,layout_name:tile - - # Key Bindings - # key name refer to `xev` or `wev` command output, - # mod keys name: super,ctrl,alt,shift,none - - # reload config - bind=SUPER,r,reload_config - - bind=SUPER,Return,spawn,${terminal} - - bind=SUPER,v,spawn,dms ipc call clipboard toggle - bind=SUPER,a,spawn,dms ipc call spotlight toggle - bind=ALT,F4,spawn,dms ipc call powermenu toggle - bind=SUPER,y,spawn,dms ipc call dankdash wallpaper - bind=SUPER,comma,spawn,dms ipc call settings focusOrToggle - - bind=SUPER,F12,spawn,gnome-calculator - bind=SUPER,b,spawn,zen - bind=SUPER,e,spawn,nautilus - - # exit - bind=SUPER,m,quit - bind=SUPER,q,killclient, - - # switch window focus - bind=SUPER,h,focusdir,left - bind=SUPER,l,focusdir,right - bind=SUPER,k,focusdir,up - bind=SUPER,j,focusdir,down - - bind=NONE,Print,spawn,${snip} full - bind=SUPER,Print,spawn,${snip} selection - bind=SUPER+SHIFT,Print,spawn,${snip} window - - # swap window - bind=SUPER+SHIFT,k,exchange_client,up - bind=SUPER+SHIFT,j,exchange_client,down - bind=SUPER+SHIFT,h,exchange_client,left - bind=SUPER+SHIFT,l,exchange_client,right - - # switch window status - bind=SUPER,g,toggleglobal, - bind=ALT,Tab,toggleoverview, - bind=SUPER,space,togglefloating, - bind=ALT,a,togglemaximizescreen, - bind=SUPER,f,toggle_all_floating, - bind=ALT,f,togglefullscreen, - bind=ALT+SHIFT,f,togglefakefullscreen, - bind=SUPER,i,minimized, - bind=SUPER,o,toggleoverlay, - bind=SUPER+SHIFT,I,restore_minimized - bind=ALT,z,toggle_scratchpad - - # scroller layout - bind=ALT,e,set_proportion,1.0 - bind=ALT,x,switch_proportion_preset, - - # switch layout - # bind=SUPER,n,switch_layout - bind=SUPER,n,spawn,dms ipc call notifications toggle - - # tag switch - bind=SUPER,1,view,1,0 - bind=SUPER,2,view,2,0 - bind=SUPER,3,view,3,0 - bind=SUPER,4,view,4,0 - bind=SUPER,5,view,5,0 - bind=SUPER,6,view,6,0 - bind=SUPER,7,view,7,0 - bind=SUPER,8,view,8,0 - bind=SUPER,9,view,9,0 - - # tag: move client to the tag and focus it - # tagsilent: move client to the tag and not focus it - # bind=Alt,1,tagsilent,1 - bind=SUPER+SHIFT,1,tag,1,0 - bind=SUPER+SHIFT,2,tag,2,0 - bind=SUPER+SHIFT,3,tag,3,0 - bind=SUPER+SHIFT,4,tag,4,0 - bind=SUPER+SHIFT,5,tag,5,0 - bind=SUPER+SHIFT,6,tag,6,0 - bind=SUPER+SHIFT,7,tag,7,0 - bind=SUPER+SHIFT,8,tag,8,0 - bind=SUPER+SHIFT,9,tag,9,0 - - # monitor switch - bind=alt+shift,Left,focusmon,left - bind=alt+shift,Right,focusmon,right - bind=SUPER+Alt,Left,tagmon,left - bind=SUPER+Alt,Right,tagmon,right - - # gaps - bind=ALT+SHIFT,X,incgaps,1 - bind=ALT+SHIFT,Z,incgaps,-1 - bind=ALT+SHIFT,R,togglegaps - - # movewin - bind=SUPER,Up,movewin,+0,-50 - bind=SUPER,Down,movewin,+0,+50 - bind=SUPER,Left,movewin,-50,+0 - bind=SUPER,Right,movewin,+50,+0 - - # resizewin - bind=ALT,k,resizewin,+0,-50 - bind=ALT,j,resizewin,+0,+50 - bind=ALT,h,resizewin,-50,+0 - bind=ALT,l,resizewin,+50,+0 - - # Volume Control (using wpctl/Pipewire) - bind=NONE,XF86AudioRaiseVolume,spawn,wpctl set-volume -l 1.5 @DEFAULT_AUDIO_SINK@ 5%+ - bind=NONE,XF86AudioLowerVolume,spawn,wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%- - bind=NONE,XF86AudioMute,spawn,wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle - - bind=NONE,XF86AudioPlay,spawn,playerctl play-pause - bind=NONE,XF86AudioNext,spawn,playerctl next - bind=NONE,XF86AudioPrev,spawn,playerctl previous - bind=NONE,XF86AudioStop,spawn,playerctl stop - - bind=NONE,XF86AudioMicMute,spawn,wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle - - bind=NONE,XF86MonBrightnessUp,spawn,brightnessctl set +5% - bind=NONE,XF86MonBrightnessDown,spawn,brightnessctl set 5%- - - mousebind=SUPER,btn_left,moveresize,curmove - mousebind=NONE,btn_middle,togglemaximizescreen,0 - mousebind=SUPER,btn_right,moveresize,curresize - - axisbind=SUPER,UP,viewtoleft_have_client - axisbind=SUPER,DOWN,viewtoright_have_client - - layerrule=noanim:1,layer_name:^dms - - env=NIXOS_OZONE_WL,1 - env=QT_AUTO_SCREEN_SCALE_FACTOR,1 - env=ELECTRON_OZONE_PLATFORM_HINT,auto - env=QT_QPA_PLATFORM,wayland - env=XDG_SESSION_TYPE,wayland - env=GDK_BACKEND,wayland,x11 - env=GDK_SCALE,1 - ''; - autostart_sh = '' - wl-paste --type text --watch cliphist store & - gnome-keyring-daemon --start --components=secrets,ssh,pkcs11 & - - ${lib.optionalString (config.beeMods.dwm.enable) '' - systemctl --user stop xidlehook.service - systemctl --user stop xautolock-session.service - systemctl --user stop xss-lock.service - systemctl --user stop clipcat.service - ''} - - ${lib.optionalString (config.beeMods.dwm.picom.enable) '' - systemctl --user stop picom.service - ''} - ''; - }; - home.packages = with pkgs; [ - wl-clipboard - cliphist - brightnessctl - ]; - } - else - { - programs.mango.enable = true; - } - ); -} diff --git a/common/modules/matugen/default.nix b/common/modules/matugen/default.nix index 6bf73a2..ecc9255 100644 --- a/common/modules/matugen/default.nix +++ b/common/modules/matugen/default.nix @@ -48,7 +48,7 @@ in output_path = '~/.config/zathura/matugen' ''} - ${lib.optionalString config.beeMods.mango.enable '' + ${lib.optionalString config.beeMods.windowManagers.mango.enable '' [templates.mango] input_path = '~/.config/matugen/templates/mango.conf' output_path = '~/.config/mango/mango-colors.conf' @@ -67,7 +67,7 @@ in output_path = '~/.config/yazi/theme.toml' ''} - ${lib.optionalString (config.beeMods.dwm.enable) '' + ${lib.optionalString (config.beeMods.windowManagers.dwm.enable) '' [templates.Xresources] input_path = "~/.config/matugen/templates/colors-xresources" output_path = "~/.config/x11/matugen.Xresources" @@ -86,12 +86,6 @@ in post_hook = "dunstctl reload" ''} - ${lib.optionalString config.beeMods.beeVim.enable '' - [templates.neovim] - input_path = "~/.config/matugen/templates/neovim.json" - output_path = "~/.config/matugen/neovim_matugen.json" - ''} - ${lib.optionalString (config.beeMods.terminal.default == "foot" || config.beeMods.terminal.default == "ghostty") '' diff --git a/common/modules/matugen/templates/matugen-mango.nix b/common/modules/matugen/templates/matugen-mango.nix index b6a89b2..385e212 100644 --- a/common/modules/matugen/templates/matugen-mango.nix +++ b/common/modules/matugen/templates/matugen-mango.nix @@ -4,7 +4,7 @@ ... }: { - config = lib.mkIf config.beeMods.mango.enable { + config = lib.mkIf config.beeMods.windowManagers.mango.enable { xdg.configFile = { "matugen/templates/mango.conf" = { text = '' diff --git a/common/modules/matugen/templates/matugen-neovim.nix b/common/modules/matugen/templates/matugen-neovim.nix deleted file mode 100644 index dcb84a2..0000000 --- a/common/modules/matugen/templates/matugen-neovim.nix +++ /dev/null @@ -1,28 +0,0 @@ -{ - config, - lib, - ... -}: -{ - config = lib.mkIf config.beeMods.beeVim.enable { - xdg.configFile = { - "matugen/templates/neovim.json" = { - text = - # json - '' - { - "source_color": "{{colors.primary.default.hex}}", - <* if {{ is_dark_mode }} *> - "background": "{{colors.background.default.hex}}", - <* else *> - "background": "{{colors.surface_container.default.hex}}", - <* endif *> - "harmony": 0.5, - "mode": "{{mode}}" - } - ''; - - }; - }; - }; -} diff --git a/common/modules/matugen/templates/matugen-xresources.nix b/common/modules/matugen/templates/matugen-xresources.nix index f33fda2..292f0f2 100644 --- a/common/modules/matugen/templates/matugen-xresources.nix +++ b/common/modules/matugen/templates/matugen-xresources.nix @@ -4,7 +4,7 @@ ... }: { - config = lib.mkIf config.beeMods.mango.enable { + config = lib.mkIf config.beeMods.windowManagers.dwm.enable { xdg.configFile."matugen/templates/colors-xresources" = { text = '' dwm.normbordercolor : {{colors.outline.default.hex}} diff --git a/common/modules/terminal/default.nix b/common/modules/terminal/default.nix index 3bc4a56..b777faf 100644 --- a/common/modules/terminal/default.nix +++ b/common/modules/terminal/default.nix @@ -39,7 +39,7 @@ with lib; }; size = mkOption { type = types.float; - default = 13.0; + default = 11.0; }; bright_color_is_bold = mkEnableOption "bright colors in bold font"; @@ -50,13 +50,13 @@ with lib; window = { padding-x = mkOption { type = types.int; - default = 10; + default = 3; description = "Window padding x axis (pixels)."; }; padding-y = mkOption { type = types.int; - default = 10; + default = 3; description = "Window padding y axis (pixels)."; }; }; diff --git a/common/modules/window_managers/default.nix b/common/modules/window_managers/default.nix new file mode 100644 index 0000000..7b51946 --- /dev/null +++ b/common/modules/window_managers/default.nix @@ -0,0 +1,72 @@ +{ + homeManager, + inputs, + moduleNameSpace, + ... +}: +{ + config, + lib, + pkgs, + ... +}: +let + args = { + moduleNameSpace = "beeMods"; + inherit inputs homeManager; + }; +in +{ + imports = [ + (import ./mango args) + (import ./hyprland args) + (import ./dwm args) + ]; + + options.${moduleNameSpace}.windowManagers = { + mango.enable = lib.mkEnableOption "Enable mangowm"; + dwm.enable = lib.mkEnableOption "Enable dwm"; + hyprland.enable = lib.mkEnableOption "Enable hyprland"; + eyeCandy = { + animations.enable = lib.mkEnableOption "Uiiiiiiiiiii"; + window = { + blur = { + enable = lib.mkEnableOption "Enable window blur"; + passes = lib.mkOption { + type = lib.types.int; + default = 1; + }; + radius = lib.mkOption { + type = lib.types.int; + default = 10; + }; + }; + shadows.enable = lib.mkEnableOption "Enable window drop shadows"; + borderRadius = lib.mkOption { + type = lib.types.int; + default = 0; + description = "Border radius"; + }; + opacity = lib.mkOption { + type = lib.types.number; + default = 1.0; + description = "Window opacity"; + }; + }; + }; + }; + config = ( + if homeManager then + { + home.packages = with pkgs; [ + wl-clipboard + cliphist + brightnessctl + ]; + } + else + { + } + ); + +} diff --git a/common/modules/window_managers/dwm/default.nix b/common/modules/window_managers/dwm/default.nix new file mode 100644 index 0000000..f665d06 --- /dev/null +++ b/common/modules/window_managers/dwm/default.nix @@ -0,0 +1,206 @@ +{ + homeManager, + inputs, + moduleNameSpace, + ... +}: +{ + config, + lib, + pkgs, + ... +}: +let + cfg = config.${moduleNameSpace}.windowManagers; + snipx11 = pkgs.writeShellScript "snipx11" '' + case $1 in + full) + ${pkgs.maim}/bin/maim | xclip -selection clipboard -t image/png + ;; + selection) + ${pkgs.maim}/bin/maim -s | xclip -selection clipboard -t image/png + ;; + window) + ${pkgs.maim}/bin/maim -i $(xdotool getactivewindow) | xclip -selection clipboard -t image/png + ;; + esac + ''; + st-patched = + (pkgs.st.override { + extraLibs = [ pkgs.libXcursor ]; + }).overrideAttrs + (oldAttrs: rec { + patches = map pkgs.fetchpatch [ + { + url = "https://st.suckless.org/patches/scrollback/st-scrollback-0.9.2.diff"; + sha256 = "sha256-ZypvRONAHS//wnZjivmqpWIqZlKTqAQ0Q8DhQpZVaqU="; + } + { + url = "https://st.suckless.org/patches/scrollback/st-scrollback-mouse-0.9.2.diff"; + sha256 = "sha256-CuNJ5FdKmAtEjwbgKeBKPJTdEfJvIdmeSAphbz0u3Uk="; + } + { + url = "https://st.suckless.org/patches/scrollback/st-scrollback-mouse-altscreen-20220127-2c5edf2.diff"; + sha256 = "sha256-8oVLgbsYCfMhNEOGadb5DFajdDKPxwgf3P/4vOXfUFo="; + } + { + url = "https://st.suckless.org/patches/xresources/st-xresources-20230320-45a15676.diff"; + sha256 = "sha256-WcL9IeyanXFiOFDGGRU0QNT8DU7wSo2o+3n+TaqASUY="; + } + { + url = "https://st.suckless.org/patches/vertcenter/st-vertcenter-20231003-eb3b894.diff"; + sha256 = "sha256-RbFNdGNi5HLAp1s8QOX3qsfxpkLcp1p/vksyZORN/uc="; + } + { + url = "https://st.suckless.org/patches/anysize/st-anysize-20220718-baa9357.diff"; + hash = "sha256-yx9VSwmPACx3EN3CAdQkxeoJKJxQ6ziC9tpBcoWuWHc="; + } + { + url = "https://st.suckless.org/patches/csi_22_23/st-csi_22_23-0.8.5.diff"; + hash = "sha256-+izEkGVkLCbhZNBD2WN4uX5j+YMmou7JaMVmPG0mrYk="; + } + { + url = "https://st.suckless.org/patches/sync/st-appsync-20200618-b27a383.diff"; + sha256 = "sha256-lys7/nup7a+GcmW+CutX0kjmbbOis2stkuhw02beuPs="; + } + { + url = "https://st.suckless.org/patches/fix_keyboard_input/st-fix-keyboard-input-20180605-dc3b5ba.diff"; + sha256 = "sha256-h5ZrCj4IrkMQanLSMmgXaRd7qZYqvbzqUnuFt/axsMI="; + } + { + url = "https://st.suckless.org/patches/boxdraw/st-boxdraw_v2-0.8.5.diff"; + sha256 = "sha256-WN/R6dPuw1eviHOvVVBw2VBSMDtfi1LCkXyX36EJKi4="; + } + # { + # url = "https://st.suckless.org/patches/themed_cursor/st-themed_cursor-0.8.1.diff"; + # sha256 = "sha256-Q/6VN9oCrdJiZPPjKMpw3UB09tIs4eJ1Hi5c8k7O7uo="; + # } + ]; + + postPatch = oldAttrs.postPatch or "" + '' + sed -i 's/Button4, *kscrollup, *{.i = 1}/Button4, kscrollup, {.i = 10}/g' config.def.h + sed -i 's/Button5, *kscrolldown, *{.i = 1}/Button5, kscrolldown, {.i = 10}/g' config.def.h + + sed -i 's/const int boxdraw = 0;/const int boxdraw = 1;/g' config.def.h + sed -i 's/const int boxdraw_bold = 0;/const int boxdraw_bold = 1;/g' config.def.h + + grep -q Xcursor x.c || sed -i '/#include /a #include ' x.c + + sed -i 's/XCreateFontCursor/XcursorLibraryLoadCursor/g' x.c + + sed -i 's/static unsigned int mouseshape/static char *mouseshape/' config.def.h + sed -i 's/XC_xterm/"ibeam"/' config.def.h + + sed -i 's/-lXft/-lXft -lXcursor/g' config.mk + ''; + }); +in +{ + imports = [ + # (import ./picom.nix homeManager) + (import ./scripts.nix homeManager) + ]; + + config = lib.mkIf cfg.dwm.enable ( + if !homeManager then + { + services.xserver = { + enable = true; + windowManager.dwm = { + enable = true; + package = inputs.mydwm.packages.${pkgs.stdenv.hostPlatform.system}.default; + }; + autoRepeatDelay = 300; + autoRepeatInterval = 20; + excludePackages = with pkgs; [ xterm ]; + displayManager.sessionCommands = '' + ${pkgs.systemd}/bin/systemctl --user import-environment DISPLAY XAUTHORITY XDG_SESSION_TYPE + ${pkgs.dbus}/bin/dbus-update-activation-environment --systemd DISPLAY XAUTHORITY XDG_SESSION_TYPE + ''; + }; + + programs.ssh.askPassword = ""; + } + else + { + xdg.dataFile."dwm/autostart.sh" = { + executable = true; + text = '' + #!${pkgs.bash}/bin/bash + + gnome-keyring-daemon --start --components=secrets,ssh,pkcs11 & + ${pkgs.polkit_gnome}/libexec/polkit-gnome-authentication-agent-1 & + + [ -f ~/.Xresources ] && xrdb -merge ~/.Xresources + + dunst & + clipcatd & + slstatus & + sync_dms + systemctl --user restart xidlehook.service xautolock-session.service xss-lock.service clipcat.service + ''; + }; + + home.packages = with pkgs; [ + st-patched + xdotool + xclip + (pkgs.dmenu.overrideAttrs (oldAttrs: { + patches = (oldAttrs.patches or [ ]) ++ [ + (pkgs.fetchpatch { + url = "https://tools.suckless.org/dmenu/patches/xresources/dmenu-xresources-4.9.diff"; + sha256 = "sha256-Np9I8hhnwmGA3W5v4tSrBN9Or8Q2Ag9x8H3yf8L9jDI="; + }) + ]; + })) + ]; + + services.clipcat = { + enable = false; + daemonSettings = { + daemonize = false; + max_history = 50; + desktop_notification = { + enable = false; + }; + }; + menuSettings = { + server_endpoint = "/run/user/1000/clipcat/grpc.sock"; + finder = "rofi"; + + rofi = { + menu_length = 10; + line_length = 100; + menu_prompt = "Clipboard"; + extra_arguments = [ ]; + }; + }; + }; + + systemd.user.services.clipcat = { + Unit = { + ConditionEnvironment = [ "XDG_SESSION_TYPE=x11" ]; + }; + }; + + xresources.extraConfig = lib.mkIf config.beeMods.matugen.enable '' + #include "${config.xdg.configHome}/x11/matugen.Xresources" + ''; + + xresources.properties = { + "Xft.dpi" = 96; + "Xft.autohint" = 0; + "Xft.antialias" = true; + "Xft.hinting" = true; + "Xft.lcdfilter" = "lcddefault"; + "Xft.hintstyle" = "hintfull"; + "Xft.rgba" = "rgb"; + "st.font" = + "${config.beeMods.terminal.font.family}:size=${toString config.beeMods.terminal.font.size}:antialias=true:autohint=true"; + "dmenu.font" = + "${config.beeMods.terminal.font.family}:size=${toString config.beeMods.terminal.font.size}"; + "st.borderpx" = 2; + }; + } + ); +} diff --git a/common/modules/window_managers/dwm/picom.nix b/common/modules/window_managers/dwm/picom.nix new file mode 100644 index 0000000..f0b8d17 --- /dev/null +++ b/common/modules/window_managers/dwm/picom.nix @@ -0,0 +1,63 @@ +homeManager: +{ config, lib, ... }: +let + cfg = config.beeMods.windowManagers; +in +{ + config = lib.mkIf cfg.enable ( + lib.optionalAttrs homeManager { + services.picom = { + enable = true; + backend = "glx"; + vSync = true; + + activeOpacity = if cfg.window.blur.enable then 0.82 else cfg.window.opacity.active; + inactiveOpacity = if cfg.window.blur.enable then 0.82 else cfg.window.opacity.inactive; + + opacityRules = [ + "100:fullscreen" + "100:_NET_WM_STATE@:32a *= '_NET_WM_STATE_FULLSCREEN'" + ]; + settings = { + blur = { + method = "dual_kawase"; + strength = cfg.window.blur.strength; + size = cfg.window.blur.size; + }; + blur-background = cfg.window.blur.enable; + blur-background-exclude = [ + "window_type = 'dock'" + "window_type = 'desktop'" + "class_g = 'slop'" + "class_g = 'dwm'" + "_GTK_FRAME_EXTENTS@" + "fullscreen" + "_NET_WM_STATE@:32a *= '_NET_WM_STATE_FULLSCREEN'" + ]; + + # xrender-sync-fence = true; + use-damage = true; + + unredir-if-possible = true; + + detect-transient = true; + detect-client-opacity = true; + mark-wmwin-focused = true; + mark-ovredir-focused = true; + detect-rounded-corners = true; + + shadow = cfg.shadow; + fading = false; + animations = cfg.animations; + }; + }; + + # systemd.user.services.picom.Install.wantedBy = lib.mkForce [ ]; + systemd.user.services.picom = { + Unit = { + ConditionEnvironment = "XDG_SESSION_TYPE=x11"; + }; + }; + } + ); +} diff --git a/common/modules/window_managers/dwm/scripts.nix b/common/modules/window_managers/dwm/scripts.nix new file mode 100644 index 0000000..5b52686 --- /dev/null +++ b/common/modules/window_managers/dwm/scripts.nix @@ -0,0 +1,78 @@ +homeManager: +{ pkgs, lib, ... }: +let + sync_dms = pkgs.writeShellScriptBin "sync_dms" '' + jq=${pkgs.jq}/bin/jq + CONFIG_FILE=$HOME/.local/state/DankMaterialShell/session.json + + get_val() { $jq -r ".$1" "$CONFIG_FILE"; } + set_val() { + local tmp=$(mktemp) + $jq --arg val "$2" ".$1 = \$val" "$CONFIG_FILE" > "$tmp" && mv "$tmp" "$CONFIG_FILE" + } + + + function sync_all { + ISNIGHTMODE=$(get_val "nightModeEnabled") + NIGHTMODETEMP=$(get_val "nightModeTemperature") + WALL=$(get_val "wallpaperPath") + ${pkgs.xwallpaper}/bin/xwallpaper --zoom "$WALL" + + if [[ "$ISNIGHTMODE" == "true" ]]; then + echo "bitch $ISNIGHTMODE" + ${pkgs.redshift}/bin/redshift -o "$NIGHTMODETEMP" + else + ${pkgs.redshift}/bin/redshift -x + fi + } + + function dmenu_settings { + ISNIGHTMODE=$(get_val "nightModeEnabled") + options="NightMode (Currently $ISNIGHTMODE)\nSync Now" + + choice=$(echo -e "$options" | dmenu -p "Settings:") + + case "$choice" in + *"NightMode"*) + if [[ "$ISNIGHTMODE" == "true" ]]; then + set_val "nightModeEnabled" "false" + else + set_val "nightModeEnabled" "true" + fi + sync_all + ;; + "Sync Now") + sync_all + ;; + esac + } + + case "$1" in + settings) dmenu_settings ;; + *) sync_all ;; + esac + ''; + logout_dmenu = pkgs.writeShellScriptBin "logout_dmenu" '' + options="Lock\nLogout\nReboot\nShutdown" + + choice=$(echo -e "$options" | dmenu -p "System:") + + case "$choice" in + Lock) slock ;; + Logout) pkill dwm ;; + Reboot) reboot ;; + Shutdown) poweroff ;; + *) exit 1 ;; + esac + ''; +in +{ + config = lib.mkIf homeManager ( + lib.optionalAttrs homeManager { + home.packages = with pkgs; [ + sync_dms + logout_dmenu + ]; + } + ); +} diff --git a/common/modules/window_managers/hyprland/default.nix b/common/modules/window_managers/hyprland/default.nix new file mode 100644 index 0000000..c338f44 --- /dev/null +++ b/common/modules/window_managers/hyprland/default.nix @@ -0,0 +1,343 @@ +{ + homeManager, + inputs, + moduleNameSpace, + ... +}: +{ + config, + lib, + pkgs, + ... +}: +let + cfg = config.${moduleNameSpace}.windowManagers; + + snip = pkgs.writeShellScript "snip" '' + case $1 in + full) + ${pkgs.grim}/bin/grim - | wl-copy + ;; + selection) + GEOM=$(${pkgs.slurp}/bin/slurp) || exit + ${pkgs.grim}/bin/grim -g "$GEOM" - | wl-copy + ;; + window) + GEOM=$(hyprctl activewindow -j | ${pkgs.jq}/bin/jq -r '"\(.at[0]),\(.at[1]) \(.size[0])x\(.size[1])"') + ${pkgs.grim}/bin/grim -g "$GEOM" - | wl-copy + ;; + esac + ''; + + smart-alacritty = pkgs.writeShellScript "smart-alacritty" '' + alacritty msg create-window || exec alacritty + ''; + + smart-ghostty = pkgs.writeShellScript "smart-ghostty" '' + ghostty +new-window || exec ghostty + ''; + + terminal = + if config.beeMods.terminal.default == "alacritty" then + smart-alacritty + else if config.beeMods.terminal.default == "ghostty" then + smart-ghostty + else + config.beeMods.terminal.default; +in +{ + config = lib.mkIf cfg.hyprland.enable ( + if homeManager then + { + wayland.windowManager.hyprland = { + enable = true; + systemd.enable = true; + systemd.variables = [ "--all" ]; + xwayland.enable = true; + systemd.enableXdgAutostart = false; + + settings = { + monitor = [ ",1920x1080@120,auto,1.0" ]; + + source = [ ] ++ lib.optional (config.beeMods.matugen.enable) "~/.config/hypr/dms/colors.conf"; + + "$mainMod" = "SUPER"; + + # env = [ + # "NIXOS_OZONE_WL,1" + # "QT_AUTO_SCREEN_SCALE_FACTOR,1" + # "ELECTRON_OZONE_PLATFORM_HINT,auto" + # "QT_QPA_PLATFORM,wayland;xcb" + # "XDG_SESSION_TYPE,wayland" + # "GDK_BACKEND,wayland,x11" + # "GDK_SCALE,1" + # ]; + + exec-once = [ + "dbus-update-activation-environment --all" + "sleep 1 && dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP" + "gnome-keyring-daemon --start --components=secrets,ssh,pkcs11" + ] + ++ lib.optionals config.beeMods.windowManagers.dwm.enable [ + "systemctl --user stop xidlehook.service" + "systemctl --user stop xautolock-session.service" + "systemctl --user stop xss-lock.service" + "systemctl --user stop clipcat.service" + ]; + + xwayland = { + force_zero_scaling = true; + }; + + input = { + follow_mouse = 1; + kb_layout = "us"; + repeat_delay = 300; + repeat_rate = 50; + sensitivity = 0; + numlock_by_default = false; + left_handed = false; + + touchpad = { + natural_scroll = true; + tap-to-click = true; + drag_lock = true; + disable_while_typing = true; + middle_button_emulation = false; + }; + }; + + general = { + layout = "master"; + gaps_in = 4; + gaps_out = 4; + border_size = 2; + + resize_on_border = true; + no_focus_fallback = true; + allow_tearing = false; + + # "col.active_border" = "$_tertiary_fixed_dim"; + # "col.inactive_border" = "$_outline"; + }; + + master = { + allow_small_split = true; + new_on_top = false; + mfact = 0.56; + }; + + scrolling = { + column_width = 0.55; + follow_focus = true; + }; + + decoration = { + rounding = cfg.eyeCandy.window.borderRadius; + + blur = { + enabled = cfg.eyeCandy.window.blur.enable; + size = cfg.eyeCandy.window.blur.radius; + passes = cfg.eyeCandy.window.blur.passes; + brightness = 0.9; + contrast = 0.9; + noise = 0.02; + vibrancy = 1.2; + popups = true; + popups_ignorealpha = 0.6; + }; + + shadow = { + enabled = cfg.eyeCandy.window.shadows.enable; + ignore_window = true; + range = 10; + render_power = 3; + offset = "0 0"; + color = "rgba(00000044)"; + }; + + # Apply opacity logic utilizing cfg.eyeCandy.options + active_opacity = + if (cfg.eyeCandy.window.blur.enable && cfg.eyeCandy.window.opacity == 1.0) then + 0.82 + else + cfg.eyeCandy.window.opacity; + inactive_opacity = + if (cfg.eyeCandy.window.blur.enable && cfg.eyeCandy.window.opacity == 1.0) then + 0.82 + else + cfg.eyeCandy.window.opacity; + fullscreen_opacity = 1.0; + + dim_inactive = false; + }; + + animations = { + enabled = cfg.eyeCandy.animations.enable; + + bezier = [ + "openCurve, 0.05, 0.7, 0.1, 1.0" + "closeCurve, 0.0, 0.0, 1.0, 1.0" + "moveCurve, 0.46, 1.0, 0.29, 1.0" + ]; + + animation = [ + "windowsIn, 1, 2.8, openCurve, slide" + "windowsOut, 1, 6.5, closeCurve, popin 80%" + "windowsMove, 1, 2.2, moveCurve" + "fadeIn, 0, 3.0, fadeCurve" + "fadeOut, 1, 2.5, moveCurve" + "workspaces, 1, 2.5, moveCurve, slide" + ]; + }; + + misc = { + vfr = true; + vrr = 0; + mouse_move_enables_dpms = true; + key_press_enables_dpms = true; + disable_splash_rendering = true; + animate_manual_resizes = true; + animate_mouse_windowdragging = false; + enable_swallow = false; + swallow_regex = "(foot|kitty|alacritty|Alacritty|com.mitchellh.ghostty|)"; + disable_hyprland_logo = true; + force_default_wallpaper = 0; + focus_on_activate = true; + }; + + binds = { + scroll_event_delay = 0; + focus_preferred_method = 1; + }; + + windowrule = [ + "workspace 1, match:class ^(foot|footclient|alacritty|com.mitchellh.ghostty)$" + "workspace 2, match:class ^(zen|firefox|obsidian)$" + "workspace 3, match:class ^(vesktop|discord|thunderbird|Element|equibop)$" + "workspace 4, match:class ^(steam)$" + "float on, match:class ^(org.gnome.Calculator|org.pulseaudio.pavucontrol)$" + "stay_focused on, match:class ^(pinentry-)(.*)$" + ]; + + layerrule = [ + "no_anim on, match:namespace ^rofi$" + "no_anim on, match:namespace ^(dms)$" + "no_anim on, match:namespace .*dms.*" + ]; + + workspace = [ "2, layout:scrolling" ]; + + bind = [ + "$mainMod, r, exec, hyprctl reload" + "$mainMod, Return, exec, ${terminal}" + "$mainMod, a, exec,dms ipc call spotlight toggle" + "$mainMod, v,exec,dms ipc call clipboard toggle" + "ALT, F4, exec, dms ipc call powermenu toggle" + "$mainMod, y, exec, dms ipc call dankdash wallpaper" + + "$mainMod, comma, exec,dms ipc call settings focusOrToggle" + + "$mainMod, F12, exec, gnome-calculator" + "$mainMod, b, exec, zen" + "$mainMod, e, exec, nautilus" + + "$mainMod, m, exit," + "$mainMod, q, killactive," + + "$mainMod, h, movefocus, l" + "$mainMod, l, movefocus, r" + "$mainMod, k, movefocus, u" + "$mainMod, j, movefocus, d" + + ", Print, exec, ${snip} full" + "$mainMod, Print, exec, ${snip} selection" + "$mainMod SHIFT, Print, exec, ${snip} window" + + "$mainMod SHIFT, k, swapwindow, u" + "$mainMod SHIFT, j, swapwindow, d" + "$mainMod SHIFT, h, swapwindow, l" + "$mainMod SHIFT, l, swapwindow, r" + + "$mainMod, g, pin," + "ALT, Tab, workspace, previous" + "$mainMod, space, togglefloating," + "ALT, a, fullscreen, 1" + "ALT, f, fullscreen, 0" + "$mainMod, i, togglespecialworkspace, minimized" + "$mainMod, i, movetoworkspacesilent, special:minimized" + "$mainMod SHIFT, i, togglespecialworkspace, minimized" + "$mainMod SHIFT, i, movetoworkspace, +0" + "ALT, z, togglespecialworkspace, scratchpad" + + "$mainMod, n, exec, beesettings layout" + + "$mainMod, 1, workspace, 1" + "$mainMod, 2, workspace, 2" + "$mainMod, 3, workspace, 3" + "$mainMod, 4, workspace, 4" + "$mainMod, 5, workspace, 5" + "$mainMod, 6, workspace, 6" + "$mainMod, 7, workspace, 7" + "$mainMod, 8, workspace, 8" + "$mainMod, 9, workspace, 9" + + "$mainMod SHIFT, 1, movetoworkspace, 1" + "$mainMod SHIFT, 2, movetoworkspace, 2" + "$mainMod SHIFT, 3, movetoworkspace, 3" + "$mainMod SHIFT, 4, movetoworkspace, 4" + "$mainMod SHIFT, 5, movetoworkspace, 5" + "$mainMod SHIFT, 6, movetoworkspace, 6" + "$mainMod SHIFT, 7, movetoworkspace, 7" + "$mainMod SHIFT, 8, movetoworkspace, 8" + "$mainMod SHIFT, 9, movetoworkspace, 9" + + "ALT SHIFT, Left, focusmonitor, l" + "ALT SHIFT, Right, focusmonitor, r" + "$mainMod ALT, Left, movecurrentworkspacetomonitor, l" + "$mainMod ALT, Right, movecurrentworkspacetomonitor, r" + ]; + + binde = [ + "$mainMod, Up, moveactive, 0 -50" + "$mainMod, Down, moveactive, 0 50" + "$mainMod, Left, moveactive, -50 0" + "$mainMod, Right, moveactive, 50 0" + + "ALT, k, resizeactive, 0 -50" + "ALT, j, resizeactive, 0 50" + "ALT, h, resizeactive, -50 0" + "ALT, l, resizeactive, 50 0" + ]; + + bindel = [ + ", XF86AudioRaiseVolume, exec, wpctl set-volume -l 1.5 @DEFAULT_AUDIO_SINK@ 5%+" + ", XF86AudioLowerVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-" + ", XF86AudioMute, exec,wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle" + ", XF86AudioMicMute, exec,wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle" + + ", XF86AudioPlay, exec, playerctl play-pause" + ", XF86AudioNext, exec, playerctl next" + ", XF86AudioPrev, exec, playerctl previous" + ", XF86AudioStop, exec, playerctl stop" + + ", XF86MonBrightnessUp, exec,brightnessctl set +5%" + ", XF86MonBrightnessDown, exec, brightnessctl set 5%-" + ]; + + bindm = [ + "$mainMod, mouse:272, movewindow" + "$mainMod, mouse:273, resizewindow" + ]; + }; + }; + } + else + { + programs.hyprland = { + enable = true; + withUWSM = false; + }; + } + ); +} diff --git a/common/modules/window_managers/mango/default.nix b/common/modules/window_managers/mango/default.nix new file mode 100644 index 0000000..9d24035 --- /dev/null +++ b/common/modules/window_managers/mango/default.nix @@ -0,0 +1,377 @@ +{ + homeManager, + inputs, + moduleNameSpace, + ... +}: +{ + config, + lib, + pkgs, + ... +}: +let + cfg = config.${moduleNameSpace}.windowManagers; + snip = pkgs.writeShellScript "snip" '' + case $1 in + full) + ${pkgs.grim}/bin/grim - | wl-copy + ;; + selection) + GEOM=$(${pkgs.slurp}/bin/slurp) || exit + ${pkgs.grim}/bin/grim -g "$GEOM" - | wl-copy + ;; + window) + ${pkgs.grim}/bin/grim -g "$(mmsg -x | awk ' + / x / {x=$3} + / y / {y=$3} + / width / {w=$3} + / height / {h=$3} + END {print x "," y " " w "x" h} + ')" - | wl-copy + ;; + esac + ''; + smart-alacritty = pkgs.writeShellScript "smart-alacritty" '' + alacritty msg create-window || exec alacritty + ''; + smart-ghostty = pkgs.writeShellScript "smart-ghostty" '' + ghostty +new-window || exec ghostty + ''; + terminal = + if config.beeMods.terminal.default == "alacritty" then + smart-alacritty + else if config.beeMods.terminal.default == "ghostty" then + smart-ghostty + else + config.beeMods.terminal.default; +in +{ + imports = + if homeManager then [ inputs.mango.hmModules.mango ] else [ inputs.mango.nixosModules.mango ]; + + config = lib.mkIf cfg.mango.enable ( + if homeManager then + { + wayland.windowManager.mango = { + enable = true; + systemd.enable = true; + systemd.variables = [ "--all" ]; + extraConfig = '' + ${lib.optionalString (config.beeMods.matugen.enable) '' + source=~/.config/mango/mango-colors.conf + ''} + + # Window effect + blur=${if cfg.eyeCandy.window.blur.enable then "1" else "0"} + blur_layer=0 + blur_optimized=1 + blur_params_num_passes = ${toString cfg.eyeCandy.window.blur.passes} + blur_params_radius = ${toString cfg.eyeCandy.window.blur.radius} + blur_params_noise = 0.02 + blur_params_brightness = 0.9 + blur_params_contrast = 0.9 + blur_params_saturation = 1.2 + + shadows=${if cfg.eyeCandy.window.shadows.enable then "1" else "0"} + layer_shadows = 0 + shadow_only_floating = 1 + shadows_size = 10 + shadows_blur = 15 + shadows_position_x = 0 + shadows_position_y = 0 + + border_radius=${toString cfg.eyeCandy.window.borderRadius} + no_radius_when_single=0 + + ${ + if (cfg.eyeCandy.window.blur.enable && cfg.eyeCandy.window.opacity == 1.0) then + '' + focused_opacity=0.82 + unfocused_opacity=0.82 + '' + else + '' + focused_opacity=${toString cfg.eyeCandy.window.opacity} + unfocused_opacity=${toString cfg.eyeCandy.window.opacity} + '' + } + + # Animation Configuration(support type:zoom,slide) + # tag_animation_direction: 1-horizontal,0-vertical + animations=${if cfg.eyeCandy.animations.enable then "1" else "0"} + layer_animations=0 + animation_type_open=slide + animation_type_close=zoom + animation_fade_in=0 + animation_fade_out=1 + tag_animation_direction=1 + zoom_initial_ratio=0.8 + zoom_end_ratio=0.8 + fadein_begin_opacity=0.5 + fadeout_begin_opacity=0.5 + animation_duration_move=250 + animation_duration_open=250 + animation_duration_tag=250 + animation_duration_close=100 + animation_duration_focus=0 + animation_curve_open=0.05,0.7,0.1,1.0 + animation_curve_move=0.46,1.0,0.29,1 + animation_curve_tag=0.46,1.0,0.29,1 + animation_curve_close=0.0,0.0,1.0,1.0 + animation_curve_focus=0.05,0.7,0.1,1.0 + animation_curve_opafadeout=0.5,0.5,0.5,0.5 + animation_curve_opafadein=0.46,1.0,0.29,1 + + # Scroller configuration + scroller_structs=15 + scroller_default_proportion=0.6 + scroller_focus_center=0 + scroller_prefer_center=0 + edge_scroller_pointer_focus=1 + scroller_default_proportion_single=1.0 + scroller_ignore_proportion_single=0 + scroller_proportion_preset=0.5,0.8,1.0 + + # Master-Stack Layout Setting + new_is_master=0 + default_mfact=0.56 + default_nmaster=1 + smartgaps=0 + + # Overview Setting + hotarea_size=10 + enable_hotarea=0 + ov_tab_mode=0 + overviewgappi=5 + overviewgappo=30 + + # Misc + no_border_when_single=0 + axis_bind_apply_timeout=100 + focus_on_activate=1 + idleinhibit_ignore_visible=0 + sloppyfocus=1 + warpcursor=1 + focus_cross_monitor=0 + focus_cross_tag=0 + enable_floating_snap=0 + snap_distance=30 + # cursor_size=24 + drag_tile_to_tile=1 + xwayland_persistence=0 + syncobj_enable=0 + allow_tearing=0 + + # keyboard + repeat_delay=300; + repeat_rate=50; + numlockon=0 + xkb_rules_layout=us + + # Trackpad + # need relogin to make it apply + disable_trackpad=0 + tap_to_click=1 + tap_and_drag=1 + drag_lock=1 + trackpad_natural_scrolling=1 + disable_while_typing=1 + left_handed=0 + middle_button_emulation=0 + swipe_min_threshold=1 + + # mouse + # need relogin to make it apply + mouse_natural_scrolling=0 + + windowrule=tags:1,appid:^(foot|footclient|alacritty|dev.zed.Zed)$ + windowrule=tags:2,appid:^(zen|firefox|obsidian)$ + windowrule=tags:3,appid:^(vesktop|discord|thunderbird|Element|equibop)$ + windowrule=tags:4,appid:^steam$ + + windowrule=scroller_proportion:0.3,appid:^steam$,title:^Friends List$ + windowrule=scroller_proportion:0.5,appid:^steam$,title:.*(Settings|Properties).* + windowrule=isfloating:1,appid:^steam$,title:^Steam - News$ + windowrule=isfloating:1,appid:^(org.gnome.Calculator|org.pulseaudio.pavucontrol)$ + windowrule=isoverlay:1,appid:^com.gabm.satty$ + + # Appearance + gappih=5 + gappiv=5 + gappoh=5 + gappov=5 + scratchpad_width_ratio=0.8 + scratchpad_height_ratio=0.9 + borderpx=2 + + # layout support: + # tile,scroller,grid,deck,monocle,center_tile,vertical_tile,vertical_scroller + tagrule=id:1,layout_name:tgmix + tagrule=id:2,layout_name:scroller + tagrule=id:3,layout_name:scroller + tagrule=id:4,layout_name:scroller + tagrule=id:5,layout_name:grid + tagrule=id:6,layout_name:tile + tagrule=id:7,layout_name:tile + tagrule=id:8,layout_name:tile + tagrule=id:9,layout_name:tile + + # Key Bindings + # key name refer to `xev` or `wev` command output, + # mod keys name: super,ctrl,alt,shift,none + + # reload config + bind=SUPER,r,reload_config + + bind=SUPER,Return,spawn,${terminal} + + bind=SUPER,v,spawn,dms ipc call clipboard toggle + bind=SUPER,a,spawn,dms ipc call spotlight toggle + bind=ALT,F4,spawn,dms ipc call powermenu toggle + bind=SUPER,y,spawn,dms ipc call dankdash wallpaper + bind=SUPER,comma,spawn,dms ipc call settings focusOrToggle + + bind=SUPER,F12,spawn,gnome-calculator + bind=SUPER,b,spawn,zen + bind=SUPER,e,spawn,nautilus + + # exit + bind=SUPER,m,quit + bind=SUPER,q,killclient, + + # switch window focus + bind=SUPER,h,focusdir,left + bind=SUPER,l,focusdir,right + bind=SUPER,k,focusdir,up + bind=SUPER,j,focusdir,down + + bind=NONE,Print,spawn,${snip} full + bind=SUPER,Print,spawn,${snip} selection + bind=SUPER+SHIFT,Print,spawn,${snip} window + + # swap window + bind=SUPER+SHIFT,k,exchange_client,up + bind=SUPER+SHIFT,j,exchange_client,down + bind=SUPER+SHIFT,h,exchange_client,left + bind=SUPER+SHIFT,l,exchange_client,right + + # switch window status + bind=SUPER,g,toggleglobal, + bind=ALT,Tab,toggleoverview, + bind=SUPER,space,togglefloating, + bind=ALT,a,togglemaximizescreen, + bind=SUPER,f,toggle_all_floating, + bind=ALT,f,togglefullscreen, + bind=ALT+SHIFT,f,togglefakefullscreen, + bind=SUPER,i,minimized, + bind=SUPER,o,toggleoverlay, + bind=SUPER+SHIFT,I,restore_minimized + bind=ALT,z,toggle_scratchpad + + # scroller layout + bind=ALT,e,set_proportion,1.0 + bind=ALT,x,switch_proportion_preset, + + # switch layout + # bind=SUPER,n,switch_layout + bind=SUPER,n,spawn,dms ipc call notifications toggle + + # tag switch + bind=SUPER,1,view,1,0 + bind=SUPER,2,view,2,0 + bind=SUPER,3,view,3,0 + bind=SUPER,4,view,4,0 + bind=SUPER,5,view,5,0 + bind=SUPER,6,view,6,0 + bind=SUPER,7,view,7,0 + bind=SUPER,8,view,8,0 + bind=SUPER,9,view,9,0 + + # tag: move client to the tag and focus it + # tagsilent: move client to the tag and not focus it + # bind=Alt,1,tagsilent,1 + bind=SUPER+SHIFT,1,tag,1,0 + bind=SUPER+SHIFT,2,tag,2,0 + bind=SUPER+SHIFT,3,tag,3,0 + bind=SUPER+SHIFT,4,tag,4,0 + bind=SUPER+SHIFT,5,tag,5,0 + bind=SUPER+SHIFT,6,tag,6,0 + bind=SUPER+SHIFT,7,tag,7,0 + bind=SUPER+SHIFT,8,tag,8,0 + bind=SUPER+SHIFT,9,tag,9,0 + + # monitor switch + bind=alt+shift,Left,focusmon,left + bind=alt+shift,Right,focusmon,right + bind=SUPER+Alt,Left,tagmon,left + bind=SUPER+Alt,Right,tagmon,right + + # gaps + bind=ALT+SHIFT,X,incgaps,1 + bind=ALT+SHIFT,Z,incgaps,-1 + bind=ALT+SHIFT,R,togglegaps + + # movewin + bind=SUPER,Up,movewin,+0,-50 + bind=SUPER,Down,movewin,+0,+50 + bind=SUPER,Left,movewin,-50,+0 + bind=SUPER,Right,movewin,+50,+0 + + # resizewin + bind=ALT,k,resizewin,+0,-50 + bind=ALT,j,resizewin,+0,+50 + bind=ALT,h,resizewin,-50,+0 + bind=ALT,l,resizewin,+50,+0 + + # Volume Control (using wpctl/Pipewire) + bind=NONE,XF86AudioRaiseVolume,spawn,wpctl set-volume -l 1.5 @DEFAULT_AUDIO_SINK@ 5%+ + bind=NONE,XF86AudioLowerVolume,spawn,wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%- + bind=NONE,XF86AudioMute,spawn,wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle + + bind=NONE,XF86AudioPlay,spawn,playerctl play-pause + bind=NONE,XF86AudioNext,spawn,playerctl next + bind=NONE,XF86AudioPrev,spawn,playerctl previous + bind=NONE,XF86AudioStop,spawn,playerctl stop + + bind=NONE,XF86AudioMicMute,spawn,wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle + + bind=NONE,XF86MonBrightnessUp,spawn,brightnessctl set +5% + bind=NONE,XF86MonBrightnessDown,spawn,brightnessctl set 5%- + + mousebind=SUPER,btn_left,moveresize,curmove + mousebind=NONE,btn_middle,togglemaximizescreen,0 + mousebind=SUPER,btn_right,moveresize,curresize + + axisbind=SUPER,UP,viewtoleft_have_client + axisbind=SUPER,DOWN,viewtoright_have_client + + layerrule=noanim:1,layer_name:^dms + + env=NIXOS_OZONE_WL,1 + env=QT_AUTO_SCREEN_SCALE_FACTOR,1 + env=ELECTRON_OZONE_PLATFORM_HINT,auto + env=QT_QPA_PLATFORM,wayland + env=XDG_SESSION_TYPE,wayland + env=GDK_BACKEND,wayland,x11 + env=GDK_SCALE,1 + ''; + autostart_sh = '' + wl-paste --type text --watch cliphist store & + gnome-keyring-daemon --start --components=secrets,ssh,pkcs11 & + + ${lib.optionalString (config.beeMods.windowManagers.dwm.enable) '' + systemctl --user stop xidlehook.service + systemctl --user stop xautolock-session.service + systemctl --user stop xss-lock.service + systemctl --user stop clipcat.service + ''} + ''; + }; + } + else + { + programs.mango.enable = true; + } + ); +} -- cgit v1.3.1