Add build script, add ly, fix hypr

This commit is contained in:
Alexander
2025-08-03 18:24:21 +02:00
parent 4a2ba48482
commit 6dc0c4af4c
16 changed files with 903 additions and 256 deletions
+32
View File
@@ -47,6 +47,9 @@ This guide documents methods for installing NixOS on a Proxmox virtual machine.
- [[#generating-hardware-configuration][Generating Hardware Configuration]] - [[#generating-hardware-configuration][Generating Hardware Configuration]]
- [[#todos][TODOs]] - [[#todos][TODOs]]
- [[#inspiration][Inspiration]] - [[#inspiration][Inspiration]]
- [[#fujin-install][Fujin install]]
- [[#boot-drive][Boot Drive]]
- [[#minimal][Minimal]]
* Installation Methods * Installation Methods
** Method 1: Remote Installation with nixos-anywhere ** Method 1: Remote Installation with nixos-anywhere
@@ -269,3 +272,32 @@ nix run github:nix-community/nixos-anywhere -- \
* Inspiration * Inspiration
The configuration and structure of this setup were inspired by the following repository: The configuration and structure of this setup were inspired by the following repository:
- [[https://github.com/notthebee/nix-config][notthebee/nix-config]] - [[https://github.com/notthebee/nix-config][notthebee/nix-config]]
* Fujin install
** Boot Drive
1. Boot into izanami
2. git clone repo 'git clone https://github.com/LichHunter/susano-nixos'
3. Disko install fujin-minimal 'nix run github:nix-community/disko#disko-install -- --flake .#fujin-minimal --disk main /dev/nvme0n1'
4. Reboot
** Minimal
1. Mount backup drive 'mkdir /tmp/drive; sudo mount /dev/sda1 /tmp/drive'
2. Copy latest backup from drive to home folder
3. Unarchive it (you should now have ssh keys)
4. Git clone nixos repo 'git clone git@github.com:LichHunter/susano-nixos'
5. Upgrade to man configuration
#+begin_src bash
sudo nixos-rebuild boot --flake .#fujin
#+end_src
6. Install emacs
#+begin_src bash
git clone --depth 1 https://github.com/doomemacs/doomemacs ~/.config/emacs
~/.config/emacs/bin/doom install
#+end_src
7. Copy configs for emacs
#+begin_src bash
cp ~/susano-nixos/machines/fujin/main/doom-configs ~/.config/doom
#+end_src
8. Update doom-emacs
#+begin_src bash
~/.config/emacs/bin/doom sync
#+end_src
Executable
+111
View File
@@ -0,0 +1,111 @@
#!/usr/bin/env bash
# A script to simplify nixos-rebuild commands for this flake.
set -euo pipefail
# --- Find Flake Root ---
# Get the directory of this script, then find the real path to its parent directory.
SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )
FLAKE_ROOT=$(realpath "$SCRIPT_DIR/..")
# --- Configuration ---
# Default user to build for.
# This is used to construct the flake reference (e.g., .#fujin).
USERNAME=$(whoami)
# --- Help Message ---
usage() {
echo "Usage: $0 <command> [options]"
echo ""
echo "A wrapper for 'nixos-rebuild' for the flake at: $FLAKE_ROOT"
echo ""
echo "Commands:"
echo " build Build the new configuration."
echo " test Test the new configuration."
echo " switch Switch to the new configuration."
echo " boot Switch to the new configuration and make it the default for next boot."
echo ""
echo "Options:"
echo " --local-build Build on the local machine instead of the default remote builder."
echo " -h, --help Show this help message."
echo ""
echo "Any other arguments are passed directly to 'nixos-rebuild'."
}
# --- Argument Parsing ---
COMMAND=""
BUILD_ARGS=("--build-host" "izanagi")
PASSTHROUGH_ARGS=()
if [[ $# -eq 0 ]]; then
usage
exit 1
fi
while [[ $# -gt 0 ]]; do
case "$1" in
build|test|switch|boot)
if [[ -n "$COMMAND" ]]; then
echo "Error: Only one command (build, test, switch, boot) can be specified." >&2
exit 1
fi
COMMAND="$1"
shift
;;
--local-build)
BUILD_ARGS=()
shift
;;
-h|--help)
usage
exit 0
;;
*)
PASSTHROUGH_ARGS+=("$1")
shift
;;
esac
done
# --- Validation ---
if [[ -z "$COMMAND" ]]; then
echo "Error: No command (build, test, switch, boot) specified." >&2
usage
exit 1
fi
# --- Sudo Check ---
SUDO_CMD=""
if [[ "$COMMAND" == "test" || "$COMMAND" == "switch" || "$COMMAND" == "boot" ]]; then
SUDO_CMD="sudo"
fi
# --- Flake Reference ---
FLAKE_REF="$FLAKE_ROOT#$USERNAME"
# --- Command Execution ---
# We build the command in an array to handle arguments with spaces correctly.
FULL_CMD=()
if [[ -n "$SUDO_CMD" ]]; then
FULL_CMD+=("$SUDO_CMD")
fi
FULL_CMD+=("nixos-rebuild" "$COMMAND" "--flake" "$FLAKE_REF")
if [[ ${#BUILD_ARGS[@]} -gt 0 ]]; then
FULL_CMD+=("${BUILD_ARGS[@]}")
fi
if [[ ${#PASSTHROUGH_ARGS[@]} -gt 0 ]]; then
FULL_CMD+=("${PASSTHROUGH_ARGS[@]}")
fi
echo "Building for user: $USERNAME on host: $(hostname)"
echo "Flake reference: $FLAKE_REF"
echo "Executing command:"
echo " ${FULL_CMD[@]}"
echo "-----------------------------------------------------"
"${FULL_CMD[@]}"
echo "-----------------------------------------------------"
echo "Done."
+1
View File
@@ -13,6 +13,7 @@ in {
config = mkIf cfg.enable { config = mkIf cfg.enable {
home.packages = with pkgs; [ home.packages = with pkgs; [
wlogout wlogout
pavucontrol # gui sound manager
]; ];
programs.waybar = { programs.waybar = {
-1
View File
@@ -3,7 +3,6 @@
{ {
imports = [ imports = [
./shell ./shell
./window-manager
./bar ./bar
./launcher ./launcher
./random ./random
-249
View File
@@ -1,249 +0,0 @@
{ config, lib, pkgs, inputs, ... }:
with lib;
let
colors = config.lib.stylix.colors;
cfg = config.dov.window-manager.hypr;
in {
options.dov.window-manager.hypr.enable = mkEnableOption "hypr configuration";
config = mkIf cfg.enable {
home.packages = with pkgs; [
swww
mako
pipewire
wireplumber
libnotify
kitty
jq # used in lock to get language
wayland-protocols
#hyprland extensions
hyprlock
hypridle
];
wayland.windowManager.hyprland = {
enable = true;
xwayland.enable = true;
package = inputs.hyprland.packages.${pkgs.system}.hyprland;
plugins = [
inputs.split-monitor-workspaces.packages.${pkgs.system}.split-monitor-workspaces
];
settings = {
monitor = ",highres,auto,1";
source = "~/.config/hypr/colors";
env = [
"LIBVA_DRIVER_NAME,nvidia"
"XDG_SESSION_TYPE,wayland"
"WLR_NO_HARDWARE_CURSORS,1"
];
#Autostart
exec = [
# Fix slow startup
"systemctl --user import-environment WAYLAND_DISPLAY XDG_CURRENT_DESKTOP"
"dbus-update-activation-environment --systemd DISPLAY WAYLAND_DISPLAY XDG_CURRENT_DESKTOP"
];
exec-once = [
"mako"
"polkit-kde-agent"
"emacs --fg-daemon"
"hypridle"
"kanshi"
"virsh net-start default"
#"thunderbird"
#"element-desktop"
"keepassxc"
"dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP"
] ++ lib.optionals config.dov.bar.waybar.enable [ "waybar" ];
"$mainMod" = "SUPER";
bind = [
"$mainMod, G, fullscreen,"
"$mainMod, t, togglegroup"
"$mainMod, v, togglefloating"
"$mainMod, s, togglesplit"
#bind = $mainMod, RETURN, exec, kitty
"$mainMod, RETURN, exec, alacritty"
"$mainMod, o, exec, emacsclient -c"
"SUPER_SHIFT, RETURN, exec, thunar"
"SUPER_SHIFT, l, exec, hyprctl switchxkblayout at-translated-set-2-keyboard 0 && hyprlock"
#bind = $mainMod, M, exit,
"SUPER_SHIFT, q, killactive,"
# Switch Keyboard Layouts
"$mainMod, SPACE, exec, hyprctl switchxkblayout teclado-gamer-husky-blizzard next"
", Print, exec, grim -g \"$(slurp)\" - | wl-copy"
"SHIFT, Print, exec, IMG=~/Pictures/$(date +%Y-%m-%d_%H-%m-%s).png && grim -g \"$(slurp)\" $IMG"
# Functional keybinds
",XF86AudioMicMute,exec,pamixer --default-source -t"
",XF86MonBrightnessDown,exec,brightnessctl s 20-"
",XF86MonBrightnessUp,exec,brightnessctl s 20+"
",XF86AudioMute,exec,amixer -q sset Master toggle"
",XF86AudioLowerVolume,exec,amixer -q sset Master 5%-"
",XF86AudioRaiseVolume,exec,amixer -q sset Master 5%+"
",XF86AudioPlay,exec,playerctl play-pause"
",XF86AudioPause,exec,playerctl play-pause"
# to switch between windows in a floating workspace
"SUPER,Tab,changegroupactive, f"
"SUPER_SHIFT,Tab,changegroupactive, b"
# Move focus with mainMod + arrow keys
"$mainMod, h, movefocus, l"
"$mainMod, l, movefocus, r"
"$mainMod, k, movefocus, u"
"$mainMod, j, movefocus, d"
# Switch workspaces with mainMod + [0-9]
"$mainMod, 1, split-workspace, 1"
"$mainMod, 2, split-workspace, 2"
"$mainMod, 3, split-workspace, 3"
"$mainMod, 4, split-workspace, 4"
"$mainMod, 5, split-workspace, 5"
"$mainMod, 6, split-workspace, 6"
"$mainMod, 7, split-workspace, 7"
"$mainMod, 8, split-workspace, 8"
"$mainMod, 9, split-workspace, 9"
"$mainMod, 0, split-workspace, 10"
# Move active window to a workspace with mainMod + SHIFT + [0-9]
"$mainMod SHIFT, 1, split-movetoworkspace, 1"
"$mainMod SHIFT, 2, split-movetoworkspace, 2"
"$mainMod SHIFT, 3, split-movetoworkspace, 3"
"$mainMod SHIFT, 4, split-movetoworkspace, 4"
"$mainMod SHIFT, 5, split-movetoworkspace, 5"
"$mainMod SHIFT, 6, split-movetoworkspace, 6"
"$mainMod SHIFT, 7, split-movetoworkspace, 7"
"$mainMod SHIFT, 8, split-movetoworkspace, 8"
"$mainMod SHIFT, 9, split-movetoworkspace, 9"
"$mainMod SHIFT, 0, split-movetoworkspace, 10"
# Scroll through existing workspaces with mainMod + scroll
"$mainMod, mouse_down, split-workspace, e+1"
"$mainMod, mouse_up, split-workspace, e-1"
"$mainMod,SPACE, exec, hyprctl switchxkblayout at-translated-set-2-keyboard next"
] ++ lib.optionals config.dov.launcher.wofi.enable [
"$mainMod, p, exec, wofi --show drun"
];
bindm = [
"$mainMod, mouse:272, movewindow"
"$mainMod, mouse:273, resizewindow"
"ALT, mouse:272, resizewindow"
];
input = {
kb_layout = "us,ru,ua";
kb_options = "grp:win_space_toggle";
follow_mouse = 1;
touchpad = {
natural_scroll = false;
};
sensitivity = 0;
};
general = {
gaps_in = 5;
gaps_out = 20;
border_size = 2;
"col.active_border" = lib.mkForce "rgba(33ccffee) rgba(00ff99ee) 45deg";
"col.inactive_border" = lib.mkForce "rgba(595959aa)";
layout = "dwindle";
};
decoration = {
rounding = 10;
shadow = {
enabled = true;
range = 4;
render_power = 3;
};
};
animations = {
enabled = "yes";
bezier = "ease,0.4,0.02,0.21,1";
animation = [
"windows, 1, 3.5, ease, slide"
"windowsOut, 1, 3.5, ease, slide"
"border, 1, 6, default"
"fade, 1, 3, ease"
"workspaces, 1, 3.5, ease"
];
};
dwindle = {
pseudotile = "yes";
preserve_split = "yes";
};
master = {
new_status = "master";
};
gestures = {
workspace_swipe = false;
};
workspace = [
#"0, monitor:DP-1"
"8, monitor:e-DP-1"
"9, monitor:e-DP-1"
#"9, on-created-empty:[tiled] thunderbird"
];
windowrulev2 = [
"workspace 9, class:^(.*thunderbird.*)$"
"group, class:^(.*thunderbird.*)$"
"workspace 9, class:^(.*Element.*)$"
"group, class:^(.*Element.*)$"
"workspace 8, title:^(.*KeePassXC.*)$"
"float, class:^(.*steam.*)$"
"noinitialfocus,class:(jetbrains-)(.*),title:^win(.*), initialTitle:win.*, floating:1"
];
};
};
home.file.".config/hypr/colors".text = ''
$background = ${colors.base00}
$foreground = ${colors.base05}
$color0 = ${colors.base00}
$color1 = ${colors.base01}
$color2 = ${colors.base02}
$color3 = ${colors.base03}
$color4 = ${colors.base04}
$color5 = ${colors.base05}
$color6 = ${colors.base06}
$color7 = ${colors.base07}
$color8 = ${colors.base08}
$color9 = ${colors.base09}
$color10 = ${colors.base0A}
$color11 = ${colors.base0B}
$color12 = ${colors.base0C}
$color13 = ${colors.base0D}
$color14 = ${colors.base0E}
$color15 = ${colors.base0F}
'';
xdg.configFile."hypr/hyprlock.conf".source = ./hyprlock.conf;
xdg.configFile."hypr/hypridle.conf".source = ./hypridle.conf;
};
}
+4
View File
@@ -32,6 +32,8 @@
}; };
}; };
networking.networkmanager.enable = true;
### ###
# Thunar configurations # Thunar configurations
### ###
@@ -48,6 +50,8 @@
virtualisation.docker.enable = true; virtualisation.docker.enable = true;
window-manager.hypr.enable = true; window-manager.hypr.enable = true;
display-manager.ly.enable = true;
}; };
### ###
+245
View File
@@ -0,0 +1,245 @@
;;; $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 "Alexander Derevianko"
user-mail-address "alexander0derevianko@gmail.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-unicode-font' -- for unicode glyphs
;; - `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 "Fira Code" :size 18)
doom-variable-pitch-font (font-spec :family "Fira Sans" :size 18))
;;
;; 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-gruvbox)
;; 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 `relative)
;; 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
;; `after!' block, otherwise Doom's defaults may override your settings. E.g.
;;
;; (after! 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 up their documentation).
;; - 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
;; - `use-package!' for configuring packages
;; - `after!' for running code after a package has loaded
;; - `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.
(general-auto-unbind-keys)
(map! :leader
(:prefix ("m" . "my")
"c" #'comment-dwim
(:prefix ("d" . "dap")
"c" #'dap-java-run-test-class
"m" #'dap-java-run-test-method
"n" #'dap-next
"i" #'dap-step-in
"C" #'dap-continue
"k" #'dap-disconnect
"r" #'dap-debug-restart
(:prefix ("b" . "breakpoint")
"a" #'dap-breakpoint-add
"d" #'dap-breakpoint-delete
"A" #'dap-breakpoint-delete-all
)
(:prefix ("d" . "debug")
"c" #'dap-java-debug-test-class
"m" #'dap-java-debug-test-method
)
)
(:prefix ("l" . "lsp")
"j" #'lsp-jt-browser
"i" #'lsp-java-organize-imports
"r" #'lsp-rename
"g d" #'lsp-goto-type-definition
)
)
)
;; (setq lsp-java-format-settings-url "https://github.com/google/styleguide/blob/gh-pages/intellij-java-google-style.xml")
;; add map for lsp-jt-browser
;; + lsp-jt-browser
;; + dap-java-run-test-class
;; + dap-java-run-test-method
(setq git-commit-summary-max-length 1000)
(after! org
(setq org-agenda-files '("~/org/agenda.org"
"~/nixos-dotfiles/todo.org"))
(setq org-default-notes-file (expand-file-name "notes.org" org-directory)
org-ellipsis ""
org-superstar-headline-bullets-list '("" "" "" "" "" "" "")
org-superstar-itembullet-alist '((?+ . ?➤) (?- . ?✦)) ; changes +/- symbols in item lists
org-agenda-start-with-log-mode t
org-log-done 'time
org-log-into-drawer t
org-hide-emphasis-markers t
;; ex. of org-link-abbrev-alist in action
;; [[arch-wiki:Name_of_Page][Description]]
org-link-abbrev-alist ; This overwrites the default Doom org-link-abbrev-list
'(("google" . "http://www.google.com/search?q=")
("arch-wiki" . "https://wiki.archlinux.org/index.php/")
("ddg" . "https://duckduckgo.com/?q=")
("wiki" . "https://en.wikipedia.org/wiki/"))
org-table-convert-region-max-lines 20000
org-todo-keywords ; This overwrites the default Doom org-todo-keywords
'((sequence
"TODO(t)" ; A task that is ready to be tackled
"INPROGRESS(i)" ; A task that is in progress
"WAIT(w)" ; Something is holding up this task
"|" ; The pipe necessary to separate "active" states and "inactive" states
"DONE(d)" ; Task has been completed
"CANCELLED(c)" )))) ; Task has been cancelled
(after! lsp-java
(require 'lsp-java-boot)
(require 'dap-java)
;; to enable the lenses
(add-hook 'lsp-mode-hook #'lsp-lens-mode)
(add-hook 'java-mode-hook #'lsp-java-boot-lens-mode)
(add-hook 'java-mode-hook #'lsp-java-boot-lens-mode)
(lsp-register-client
(make-lsp-client :new-connection (lsp-stdio-connection "nixd")
:major-modes '(nix-mode)
:priority 0
:server-id 'nixd))
)
(add-to-list 'safe-local-variable-values #'stringp)
(advice-add 'risky-local-variable-p :override #'ignore)
;; Email client seup
(use-package! mu4e
;; pull in org helpers
;;(require 'mu4e-org)
:config
(setq user-mail-address "alexander0derevianko@gmail.com"
user-full-name "Alexander Derevianko"
;; I have my mbsyncrc in a different folder on my system, to keep it separate from the
;; mbsyncrc available publicly in my dotfiles. You MUST edit the following line.
;; Be sure that the following command is: "mbsync -c ~/.config/mu4e/mbsyncrc -a"
mu4e-get-mail-command "mbsync -c ~/.config/mu4e/mbsyncrc -a"
mu4e-update-interval 300
;; mu4e-compose-signature
;; (concat
;; "Derek Taylor\n"
;; "http://www.youtube.com/DistroTube\n")
message-send-mail-function 'smtpmail-send-it
starttls-use-gnutls t
mu4e-root-maildir "~/Mail"
;; Make sure plain text mails flow correctly for recipients
mu4e-compose-format-flowed t
)
(setq mu4e-contexts
(list
(make-mu4e-context
:name "Personal"
:match-func
(lambda (msg)
(when msg
(string-prefix-p "/alex-derevianko" (mu4e-message-field msg :maildir))))
:vars '((user-mail-address . "alexander0derevianko@gmail.com")
(user-full-name . "Alexander Derevianko")
(smtpmail-smtp-server . "smtp.gmail.com")
(smtpmail-smtp-service . 465)
(smtpmail-stream-type . ssl)
(mu4e-sent-folder . "/alex-derevianko/[Gmail]/Sent Mail")
(mu4e-drafts-folder . "/alex-derevianko/[Gmail]/Drafts")
(mu4e-trash-folder . "/alex-derevianko/[Gmail]/Trash")
(mu4e-refile-folder . "/alex-derevianko/[Gmail]/All Mail")
(mu4e-maildir-shortcuts . '(("/alex-derevianko/INBOX" . ?i)
("/alex-derevianko/[Gmail]/Sent Mail" . ?s)))
)))
)
)
(use-package! org-mime
:ensure t
:config
(setq org-mime-export-options '(:section-numbers nil
:with-author nil
:with-toc nil))
(add-hook! 'message-send-hook 'org-mime-confirm-when-no-multipart))
;; Music emms
(use-package! emms
:config
(require 'emms-setup)
(require 'emms-player-mpd)
(emms-all)
(setq emms-seek-seconds 5
emms-player-list '(emms-player-mpd)
emms-info-functions '(emms-info-mpd)))
(after! lsp-mode
;; (lsp-register-client ;
;; (make-lsp-client :new-connection (lsp-stdio-connection "nixd")
;; :major-modes '(nix-mode)
;; :priority 0
;; :server-id 'nixd))
(use-package lsp-nix
:ensure lsp-mode
:after (lsp-mode)
:demand t
:custom
(lsp-nix-nil-formatter ["nixpkgs-fmt"]))
(use-package nix-mode
:hook (nix-mode . lsp-deferred)
:ensure t)
)
+196
View File
@@ -0,0 +1,196 @@
;;; 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
doom-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
hydra
;;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
;;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
;;word-wrap ; soft wrapping with language-aware indent
:emacs
dired ; making dired pretty [functional]
electric ; smarter, keyword-based electric-indent
ibuffer ; interactive buffer management
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 ; FIXME 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
lsp ; M-x vscode
(magit +forge) ; a git porcelain for Emacs
;;make ; run make tasks from Emacs
;;pass ; password manager for nerds
pdf ; pdf enhancements
;;prodigy ; FIXME managing external services & code builders
;;rgb ; creating color strings
;;taskrunner ; taskrunner for all your projects
;;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
;;agda ; 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
(java +lsp) ; the poster child for carpal tunnel syndrome
(javascript +lsp +tree-sitter) ; 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
org ; organize your plain life in plain text
;;php ; perl's insecure younger brother
;;plantuml ; diagrams for confusing people more
;;purescript ; javascript, but functional
(python +lsp) ; 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 +lsp) ; 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 +lsp +tree-sitter) ; 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
;;twitter ; twitter client https://twitter.com/vnought
:config
;;literate
(default +bindings +smartparens))
@@ -0,0 +1,52 @@
;; -*- no-byte-compile: t; -*-
;;; $DOOMDIR/packages.el
;; To install a package with Doom you must declare them here and run 'doom sync'
;; on the command line, then restart Emacs for the changes to take effect -- or
;; use 'M-x doom/reload'.
;; 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)
;;(package! mu4e :pin "b36e492")
+4
View File
@@ -16,6 +16,10 @@
sc = "source $HOME/.zshrc"; sc = "source $HOME/.zshrc";
psax = "ps ax | grep"; psax = "ps ax | grep";
cp = "rsync -ah --progress"; cp = "rsync -ah --progress";
nixos-build = "nixos-rebuild build --flake ~/susano-nixos/#${username}";
nixos-test = "sudo nixos-rebuild test --flake ~/susano-nixos/#${username}";
nixos-switch = "sudo nixos-rebuild switch --flake ~/susano-nixos/#${username}";
nixos-boot = "sudo nixos-rebuild boot --flake ~/susano-nixos/#${username}";
}; };
}; };
+1
View File
@@ -11,5 +11,6 @@
./auth ./auth
./development ./development
./window-manager ./window-manager
./display-manager
]; ];
} }
@@ -2,6 +2,6 @@
{ {
imports = [ imports = [
./hypr ./ly
]; ];
} }
+17
View File
@@ -0,0 +1,17 @@
{ config, lib, pkgs, ... }:
with lib;
let
cfg = config.dov.display-manager.ly;
in {
options.dov.display-manager.ly.enable = mkEnableOption "ly config";
config = mkIf cfg.enable {
services.displayManager.ly = {
enable = true;
};
};
}
+239 -5
View File
@@ -1,10 +1,11 @@
{ inputs, config, lib, pkgs, ... }: { inputs, config, lib, pkgs, username, ... }:
with lib; with lib;
let let
colors = config.lib.stylix.colors; colors = config.lib.stylix.colors;
cfg = config.dov.window-manager.hypr; cfg = config.dov.window-manager.hypr;
hm-cfg = config.home-manager.users.${username}.dov;
in { in {
options.dov.window-manager.hypr.enable = mkEnableOption "hypr configuration"; options.dov.window-manager.hypr.enable = mkEnableOption "hypr configuration";
config = mkIf cfg.enable { config = mkIf cfg.enable {
@@ -14,10 +15,7 @@ in {
}; };
environment = { environment = {
systemPackages = with pkgs; [ systemPackages = with pkgs; [ wlr-randr wdisplays ];
wlr-randr
wdisplays
];
sessionVariables = { sessionVariables = {
WLR_NO_HARWARE_CURSORS = "1"; WLR_NO_HARWARE_CURSORS = "1";
@@ -43,5 +41,241 @@ in {
]; ];
}; };
}; };
home-manager.users.fujin.config = {
home.packages = with pkgs; [
swww
mako
pipewire
wireplumber
libnotify
kitty
jq # used in lock to get language
wayland-protocols
#hyprland extensions
hyprlock
hypridle
];
wayland.windowManager.hyprland = {
enable = true;
xwayland.enable = true;
package = inputs.hyprland.packages.${pkgs.system}.hyprland;
plugins = [
inputs.split-monitor-workspaces.packages.${pkgs.system}.split-monitor-workspaces
];
settings = {
monitor = ",highres,auto,1";
source = "~/.config/hypr/colors";
env = [
"LIBVA_DRIVER_NAME,nvidia"
"XDG_SESSION_TYPE,wayland"
"WLR_NO_HARDWARE_CURSORS,1"
];
#Autostart
exec = [
# Fix slow startup
"systemctl --user import-environment WAYLAND_DISPLAY XDG_CURRENT_DESKTOP"
"dbus-update-activation-environment --systemd DISPLAY WAYLAND_DISPLAY XDG_CURRENT_DESKTOP"
];
exec-once = [
"mako"
"polkit-kde-agent"
"emacs --fg-daemon"
"hypridle"
"kanshi"
"virsh net-start default"
#"thunderbird"
#"element-desktop"
"keepassxc"
"dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP"
] ++ lib.optionals hm-cfg.bar.waybar.enable [ "waybar" ];
"$mainMod" = "SUPER";
bind = [
"$mainMod, G, fullscreen,"
"$mainMod, t, togglegroup"
"$mainMod, v, togglefloating"
"$mainMod, s, togglesplit"
#bind = $mainMod, RETURN, exec, kitty
"$mainMod, RETURN, exec, alacritty"
"$mainMod, o, exec, emacsclient -c"
"SUPER_SHIFT, RETURN, exec, thunar"
"SUPER_SHIFT, l, exec, hyprctl switchxkblayout at-translated-set-2-keyboard 0 && hyprlock"
#bind = $mainMod, M, exit,
"SUPER_SHIFT, q, killactive,"
# Switch Keyboard Layouts
"$mainMod, SPACE, exec, hyprctl switchxkblayout teclado-gamer-husky-blizzard next"
'', Print, exec, grim -g "$(slurp)" - | wl-copy''
''
SHIFT, Print, exec, IMG=~/Pictures/$(date +%Y-%m-%d_%H-%m-%s).png && grim -g "$(slurp)" $IMG''
# Functional keybinds
",XF86AudioMicMute,exec,pamixer --default-source -t"
",XF86MonBrightnessDown,exec,brightnessctl s 20-"
",XF86MonBrightnessUp,exec,brightnessctl s 20+"
",XF86AudioMute,exec,amixer -q sset Master toggle"
",XF86AudioLowerVolume,exec,amixer -q sset Master 5%-"
",XF86AudioRaiseVolume,exec,amixer -q sset Master 5%+"
",XF86AudioPlay,exec,playerctl play-pause"
",XF86AudioPause,exec,playerctl play-pause"
# to switch between windows in a floating workspace
"SUPER,Tab,changegroupactive, f"
"SUPER_SHIFT,Tab,changegroupactive, b"
# Move focus with mainMod + arrow keys
"$mainMod, h, movefocus, l"
"$mainMod, l, movefocus, r"
"$mainMod, k, movefocus, u"
"$mainMod, j, movefocus, d"
# Switch workspaces with mainMod + [0-9]
"$mainMod, 1, split-workspace, 1"
"$mainMod, 2, split-workspace, 2"
"$mainMod, 3, split-workspace, 3"
"$mainMod, 4, split-workspace, 4"
"$mainMod, 5, split-workspace, 5"
"$mainMod, 6, split-workspace, 6"
"$mainMod, 7, split-workspace, 7"
"$mainMod, 8, split-workspace, 8"
"$mainMod, 9, split-workspace, 9"
"$mainMod, 0, split-workspace, 10"
# Move active window to a workspace with mainMod + SHIFT + [0-9]
"$mainMod SHIFT, 1, split-movetoworkspace, 1"
"$mainMod SHIFT, 2, split-movetoworkspace, 2"
"$mainMod SHIFT, 3, split-movetoworkspace, 3"
"$mainMod SHIFT, 4, split-movetoworkspace, 4"
"$mainMod SHIFT, 5, split-movetoworkspace, 5"
"$mainMod SHIFT, 6, split-movetoworkspace, 6"
"$mainMod SHIFT, 7, split-movetoworkspace, 7"
"$mainMod SHIFT, 8, split-movetoworkspace, 8"
"$mainMod SHIFT, 9, split-movetoworkspace, 9"
"$mainMod SHIFT, 0, split-movetoworkspace, 10"
# Scroll through existing workspaces with mainMod + scroll
"$mainMod, mouse_down, split-workspace, e+1"
"$mainMod, mouse_up, split-workspace, e-1"
"$mainMod,SPACE, exec, hyprctl switchxkblayout at-translated-set-2-keyboard next"
] ++ lib.optionals hm-cfg.launcher.wofi.enable
[ "$mainMod, p, exec, wofi --show drun" ];
bindm = [
"$mainMod, mouse:272, movewindow"
"$mainMod, mouse:273, resizewindow"
"ALT, mouse:272, resizewindow"
];
input = {
kb_layout = "us,ru,ua";
kb_options = "grp:win_space_toggle";
follow_mouse = 1;
touchpad = { natural_scroll = false; };
sensitivity = 0;
};
general = {
gaps_in = 5;
gaps_out = 20;
border_size = 2;
"col.active_border" =
lib.mkForce "rgba(33ccffee) rgba(00ff99ee) 45deg";
"col.inactive_border" = lib.mkForce "rgba(595959aa)";
layout = "dwindle";
};
decoration = {
rounding = 10;
shadow = {
enabled = true;
range = 4;
render_power = 3;
};
};
animations = {
enabled = "yes";
bezier = "ease,0.4,0.02,0.21,1";
animation = [
"windows, 1, 3.5, ease, slide"
"windowsOut, 1, 3.5, ease, slide"
"border, 1, 6, default"
"fade, 1, 3, ease"
"workspaces, 1, 3.5, ease"
];
};
dwindle = {
pseudotile = "yes";
preserve_split = "yes";
};
master = { new_status = "master"; };
gestures = { workspace_swipe = false; };
workspace = [
#"0, monitor:DP-1"
"8, monitor:e-DP-1"
"9, monitor:e-DP-1"
#"9, on-created-empty:[tiled] thunderbird"
];
windowrulev2 = [
"workspace 9, class:^(.*thunderbird.*)$"
"group, class:^(.*thunderbird.*)$"
"workspace 9, class:^(.*Element.*)$"
"group, class:^(.*Element.*)$"
"workspace 8, title:^(.*KeePassXC.*)$"
"float, class:^(.*steam.*)$"
"noinitialfocus,class:(jetbrains-)(.*),title:^win(.*), initialTitle:win.*, floating:1"
];
};
};
home.file.".config/hypr/colors".text = ''
$background = ${colors.base00}
$foreground = ${colors.base05}
$color0 = ${colors.base00}
$color1 = ${colors.base01}
$color2 = ${colors.base02}
$color3 = ${colors.base03}
$color4 = ${colors.base04}
$color5 = ${colors.base05}
$color6 = ${colors.base06}
$color7 = ${colors.base07}
$color8 = ${colors.base08}
$color9 = ${colors.base09}
$color10 = ${colors.base0A}
$color11 = ${colors.base0B}
$color12 = ${colors.base0C}
$color13 = ${colors.base0D}
$color14 = ${colors.base0E}
$color15 = ${colors.base0F}
'';
xdg.configFile."hypr/hyprlock.conf".source = ./hyprlock.conf;
xdg.configFile."hypr/hypridle.conf".source = ./hypridle.conf;
};
}; };
} }