commit 2c0e4f885e04ef3a699d699cd1f22342112ec4c8 Author: Arne Dußin Date: Wed Feb 26 00:02:52 2025 +0100 add initial unsanitised dotfiles Adds the clearest current starting point of my dotfiles I can make out. There is no way to automate anything yet. Lots of stuff is missing from the nix configuration, which needs to be added per machine. diff --git a/alacritty.toml b/alacritty.toml new file mode 100644 index 0000000..ee0c396 --- /dev/null +++ b/alacritty.toml @@ -0,0 +1,103 @@ + +[bell] +animation = "EaseOutExpo" +color = "0xffffff" +duration = 0 + +[colors] +draw_bold_text_with_bright_colors = true +indexed_colors = [] + +[colors.bright] +black = "0x666666" +blue = "0x7aa6da" +cyan = "0x54ced6" +green = "0x9ec400" +magenta = "0xb77ee0" +red = "0xff3334" +white = "0xffffff" +yellow = "0xe7c547" + +[colors.normal] +black = "0x000000" +blue = "0x7aa6da" +cyan = "0x70c0ba" +green = "0xb9ca4a" +magenta = "0xc397d8" +red = "0xd54e53" +white = "0xeaeaea" +yellow = "0xe6c547" + +[colors.primary] +background = "0x000000" +foreground = "0xffe6a0" + +[cursor] +style = "Block" +unfocused_hollow = true + +[font] +size = 10.0 + +[font.glyph_offset] +x = 0 +y = 0 + +[font.normal] +family = "Tamsyn" +style = "Regular" + +[font.offset] +x = 0 +y = 0 + +[[keyboard.bindings]] +action = "Paste" +key = "Paste" + +[[keyboard.bindings]] +action = "Copy" +key = "Copy" + +[[keyboard.bindings]] +action = "ClearLogNotice" +key = "L" +mods = "Control" + +[[keyboard.bindings]] +chars = "\f" +key = "L" +mods = "Control" + +[[keyboard.bindings]] +chars = "\u001BOH" +key = "Home" +mode = "AppCursor" + +[mouse] +hide_when_typing = false + +[scrolling] +history = 10000 +multiplier = 1 + +[selection] +save_to_clipboard = false +semantic_escape_chars = ",│`|:\"' ()[]{}<>" + +[window] +decorations = "full" +dynamic_padding = false +dynamic_title = true +opacity = 0.9 + +[window.dimensions] +columns = 0 +lines = 0 + +[window.padding] +x = 2 +y = 2 + +[general] +live_config_reload = true diff --git a/configuration.nix b/configuration.nix new file mode 100644 index 0000000..d74424e --- /dev/null +++ b/configuration.nix @@ -0,0 +1,202 @@ +{ config, lib, pkgs, ... }: +{ + imports = + [ # Include the results of the hardware scan. + ./hardware-configuration.nix + ]; + + # Use the systemd-boot EFI boot loader. + boot.loader.systemd-boot.enable = true; + boot.loader.efi.canTouchEfiVariables = true; + + nix.settings.experimental-features = [ "nix-command" "flakes" ]; + + hardware.graphics = { + enable = true; + enable32Bit = true; + }; + + networking.hostName = "lamarr"; # Define your hostname. + networking.networkmanager.enable = true; # Easiest to use and most distros use this by default. + + # Set your time zone. + time.timeZone = "Europe/Berlin"; + + # Internationalisation + i18n = { + defaultLocale = "en_US.UTF-8"; + inputMethod = { + enable = true; + type = "fcitx5"; + }; + }; + console = { + font = "Lat2-Terminus16"; + useXkbConfig = true; + }; + + + # Configure network proxy if necessary + # networking.proxy.default = "http://user:password@proxy:port/"; + # networking.proxy.noProxy = "127.0.0.1,localhost,internal.domain"; + + # Select internationalisation properties. + + # Enable CUPS to print documents. + # services.printing.enable = true; + + # Enable sound. + # hardware.pulseaudio.enable = true; + # OR + # services.pipewire = { + # enable = true; + # pulse.enable = true; + # }; + + # Enable touchpad support (enabled default in most desktopManager). + # services.libinput.enable = true; + + # Define a user account. Don't forget to set a password with ‘passwd’. + # users.users.alice = { + # isNormalUser = true; + # extraGroups = [ "wheel" ]; # Enable ‘sudo’ for the user. + # packages = with pkgs; [ + # tree + # ]; + # }; + + # programs.firefox.enable = true; + + # List packages installed in system profile. To search, run: + # $ nix search wget + # environment.systemPackages = with pkgs; [ + # vim # Do not forget to add an editor to edit configuration.nix! The Nano editor is also installed by default. + # wget + # ]; + + # Some programs need SUID wrappers, can be configured further or are + # started in user sessions. + # programs.mtr.enable = true; + # programs.gnupg.agent = { + # enable = true; + # enableSSHSupport = true; + # }; + + # Enable rtkit so pipewire can aquire real-time priority + security.rtkit.enable = true; + + ################################ + # Packages for ALL users # + ################################ + environment.systemPackages = with pkgs; [ + alacritty + asciidoctor-with-extensions + bat + dunst + eww + feh + file + fzf + git + git-lfs + helix + htop + linux-manual + man-pages + man-pages-posix + mlocate + mpv + mumble + nix-your-shell + pass + pavucontrol + playerctl + python3 + ripgrep + vim + wget + wine + winetricks + xarchiver + xclip + xdo + zathura + ]; + + ################## + # Programs # + ################## + programs = { + firefox = { + enable = true; + languagePacks = [ "de" "en-GB" ]; + }; + gnupg.agent = { + enable = true; + enableSSHSupport = true; + pinentryPackage = pkgs.pinentry-curses; + }; + mtr.enable = true; + }; + + ################## + # Services # + ################## + services = { + pcscd.enable = true; + picom = { + enable = true; + backend = "glx"; + }; + printing.enable = true; + xserver = { + enable = true; + displayManager.startx.enable = true; + windowManager.leftwm.enable = true; + xkb.layout = "us"; + xkb.variant = "dvp"; + xkb.options = "caps:escape"; + }; + }; + + ############### + # Fonts # + ############### + fonts.packages = with pkgs; with nerd-fonts; [ + agave + anonymice + daddy-time-mono + envy-code-r + fantasque-sans-mono + hurmit + iosevka + iosevka-term-slab + jetbrains-mono + source-han-mono + tamsyn + tamzen + ]; + + # Enable the OpenSSH daemon. + # services.openssh.enable = true; + + # Open ports in the firewall. + # networking.firewall.allowedTCPPorts = [ ... ]; + # networking.firewall.allowedUDPPorts = [ ... ]; + # Or disable the firewall altogether. + # networking.firewall.enable = false; + + ########################## + # User definitions # + ########################## + users.users.zentux = { + shell = pkgs.nushell; + isNormalUser = true; + extraGroups = [ "wheel" "networkmanager" "video" "kvm" ]; + packages = with pkgs; [ ]; + }; + + # Respect your shit. Don't touch this. + system.stateVersion = "24.11"; + +} diff --git a/dunstrc b/dunstrc new file mode 100644 index 0000000..603f0d4 --- /dev/null +++ b/dunstrc @@ -0,0 +1,466 @@ +[global] + ### Display ### + + # Which monitor should the notifications be displayed on. + monitor = 0 + + # Display notification on focused monitor. Possible modes are: + # mouse: follow mouse pointer + # keyboard: follow window with keyboard focus + # none: don't follow anything + # + # "keyboard" needs a window manager that exports the + # _NET_ACTIVE_WINDOW property. + # This should be the case for almost all modern window managers. + # + # If this option is set to mouse or keyboard, the monitor option + # will be ignored. + follow = mouse + + # The geometry of the window: + # [{width}]x{height}[+/-{x}+/-{y}] + # The geometry of the message window. + # The height is measured in number of notifications everything else + # in pixels. If the width is omitted but the height is given + # ("-geometry x2"), the message window expands over the whole screen + # (dmenu-like). If width is 0, the window expands to the longest + # message displayed. A positive x is measured from the left, a + # negative from the right side of the screen. Y is measured from + # the top and down respectively. + # The width can be negative. In this case the actual width is the + # screen width minus the width defined in within the geometry option. + geometry = "500x5-30+20" + + # Turn on the progess bar + progress_bar = true + + # Set the progress bar height. This includes the frame, so make sure + # it's at least twice as big as the frame width. + progress_bar_height = 10 + + # Set the frame width of the progress bar + progress_bar_frame_width = 1 + + # Set the minimum width for the progress bar + progress_bar_min_width = 150 + + # Set the maximum width for the progress bar + progress_bar_max_width = 500 + + + # Show how many messages are currently hidden (because of geometry). + indicate_hidden = yes + + # Shrink window if it's smaller than the width. Will be ignored if + # width is 0. + shrink = no + + # The transparency of the window. Range: [0; 100]. + # This option will only work if a compositing window manager is + # present (e.g. xcompmgr, compiz, etc.). + transparency = 0 + + # The height of the entire notification. If the height is smaller + # than the font height and padding combined, it will be raised + # to the font height and padding. + notification_height = 0 + + # Draw a line of "separator_height" pixel height between two + # notifications. + # Set to 0 to disable. + separator_height = 2 + + # Padding between text and separator. + padding = 8 + + # Horizontal padding. + horizontal_padding = 8 + + # Padding between text and icon. + text_icon_padding = 0 + + # Defines width in pixels of frame around the notification window. + # Set to 0 to disable. + frame_width = 3 + + # Defines color of the frame around the notification window. + frame_color = "#fe5f55" + + # Define a color for the separator. + # possible values are: + # * auto: dunst tries to find a color fitting to the background; + # * foreground: use the same color as the foreground; + # * frame: use the same color as the frame; + # * anything else will be interpreted as a X color. + separator_color = frame + + # Sort messages by urgency. + sort = yes + + # Don't remove messages, if the user is idle (no mouse or keyboard input) + # for longer than idle_threshold seconds. + # Set to 0 to disable. + # A client can set the 'transient' hint to bypass this. See the rules + # section for how to disable this if necessary + idle_threshold = 120 + + ### Text ### + + font = Hurmit NerdFont 17 + + # The spacing between lines. If the height is smaller than the + # font height, it will get raised to the font height. + line_height = 0 + + # Possible values are: + # full: Allow a small subset of html markup in notifications: + # bold + # italic + # strikethrough + # underline + # + # For a complete reference see + # . + # + # strip: This setting is provided for compatibility with some broken + # clients that send markup even though it's not enabled on the + # server. Dunst will try to strip the markup but the parsing is + # simplistic so using this option outside of matching rules for + # specific applications *IS GREATLY DISCOURAGED*. + # + # no: Disable markup parsing, incoming notifications will be treated as + # plain text. Dunst will not advertise that it has the body-markup + # capability if this is set as a global setting. + # + # It's important to note that markup inside the format option will be parsed + # regardless of what this is set to. + markup = full + + # The format of the message. Possible variables are: + # %a appname + # %s summary + # %b body + # %i iconname (including its path) + # %I iconname (without its path) + # %p progress value if set ([ 0%] to [100%]) or nothing + # %n progress value if set without any extra characters + # %% Literal % + # Markup is allowed + format = "%s\n%b" + + # Alignment of message text. + # Possible values are "left", "center" and "right". + alignment = left + + # Vertical alignment of message text and icon. + # Possible values are "top", "center" and "bottom". + vertical_alignment = center + + # Show age of message if message is older than show_age_threshold + # seconds. + # Set to -1 to disable. + show_age_threshold = 60 + + # Split notifications into multiple lines if they don't fit into + # geometry. + word_wrap = yes + + # When word_wrap is set to no, specify where to make an ellipsis in long lines. + # Possible values are "start", "middle" and "end". + ellipsize = middle + + # Ignore newlines '\n' in notifications. + ignore_newline = no + + # Stack together notifications with the same content + stack_duplicates = true + + # Hide the count of stacked notifications with the same content + hide_duplicate_count = false + + # Display indicators for URLs (U) and actions (A). + show_indicators = yes + + ### Icons ### + + # Align icons left/right/off + icon_position = left + + # Scale small icons up to this size, set to 0 to disable. Helpful + # for e.g. small files or high-dpi screens. In case of conflict, + # max_icon_size takes precedence over this. + min_icon_size = 0 + + # Scale larger icons down to this size, set to 0 to disable + max_icon_size = 32 + + # Paths to default icons. + icon_path = /usr/share/icons/gnome/16x16/status/:/usr/share/icons/gnome/16x16/devices/ + + ### History ### + + # Should a notification popped up from history be sticky or timeout + # as if it would normally do. + sticky_history = yes + + # Maximum amount of notifications kept in history + history_length = 20 + + ### Misc/Advanced ### + + # dmenu path. + dmenu = /usr/bin/dmenu -p dunst: + + # Browser for opening urls in context menu. + browser = /usr/bin/firefox -new-tab + + # Always run rule-defined scripts, even if the notification is suppressed + always_run_script = true + + # Define the title of the windows spawned by dunst + title = Dunst + + # Define the class of the windows spawned by dunst + class = Dunst + + # Print a notification on startup. + # This is mainly for error detection, since dbus (re-)starts dunst + # automatically after a crash. + startup_notification = true + + # Manage dunst's desire for talking + # Can be one of the following values: + # crit: Critical features. Dunst aborts + # warn: Only non-fatal warnings + # mesg: Important Messages + # info: all unimportant stuff + # debug: all less than unimportant stuff + verbosity = mesg + + # Define the corner radius of the notification window + # in pixel size. If the radius is 0, you have no rounded + # corners. + # The radius will be automatically lowered if it exceeds half of the + # notification height to avoid clipping text and/or icons. + corner_radius = 10 + + # Ignore the dbus closeNotification message. + # Useful to enforce the timeout set by dunst configuration. Without this + # parameter, an application may close the notification sent before the + # user defined timeout. + ignore_dbusclose = false + + ### Wayland ### + # These settings are Wayland-specific. They have no effect when using X11 + + # Uncomment this if you want to let notications appear under fullscreen + # applications (default: overlay) + # layer = top + + # Set this to true to use X11 output on Wayland. + force_xwayland = false + + ### Legacy + + # Use the Xinerama extension instead of RandR for multi-monitor support. + # This setting is provided for compatibility with older nVidia drivers that + # do not support RandR and using it on systems that support RandR is highly + # discouraged. + # + # By enabling this setting dunst will not be able to detect when a monitor + # is connected or disconnected which might break follow mode if the screen + # layout changes. + force_xinerama = false + + ### mouse + + # Defines list of actions for each mouse event + # Possible values are: + # * none: Don't do anything. + # * do_action: If the notification has exactly one action, or one is marked as default, + # invoke it. If there are multiple and no default, open the context menu. + # * close_current: Close current notification. + # * close_all: Close all notifications. + # These values can be strung together for each mouse event, and + # will be executed in sequence. + mouse_left_click = close_current + mouse_middle_click = do_action, close_current + mouse_right_click = close_all + +# Experimental features that may or may not work correctly. Do not expect them +# to have a consistent behaviour across releases. +[experimental] + # Calculate the dpi to use on a per-monitor basis. + # If this setting is enabled the Xft.dpi value will be ignored and instead + # dunst will attempt to calculate an appropriate dpi value for each monitor + # using the resolution and physical size. This might be useful in setups + # where there are multiple screens with very different dpi values. + per_monitor_dpi = false + +# The internal keyboard shortcut support in dunst is now considered deprecated +# and should be replaced by dunstctl calls. You can use the configuration of your +# WM or DE to bind these to shortcuts of your choice. +# Check the dunstctl manual page for more info. +[shortcuts] + + # Shortcuts are specified as [modifier+][modifier+]...key + # Available modifiers are "ctrl", "mod1" (the alt-key), "mod2", + # "mod3" and "mod4" (windows-key). + # Xev might be helpful to find names for keys. + + # Close notification. Equivalent dunstctl command: + # dunstctl close + # close = ctrl+space + + # Close all notifications. Equivalent dunstctl command: + # dunstctl close-all + # close_all = ctrl+shift+space + + # Redisplay last message(s). Equivalent dunstctl command: + # dunstctl history-pop + # history = ctrl+grave + + # Context menu. Equivalent dunstctl command: + # dunstctl context + # context = ctrl+shift+period + +[urgency_low] + # IMPORTANT: colors have to be defined in quotation marks. + # Otherwise the "#" and following would be interpreted as a comment. + background = "#fe5f55" + foreground = "#ffffff" + timeout = 12 + # Icon for notifications with low urgency, uncomment to enable + #icon = /path/to/icon + +[urgency_normal] + background = "#fe5f55" + foreground = "#ffffff" + timeout = 12 + # Icon for notifications with normal urgency, uncomment to enable + #icon = /path/to/icon + +[urgency_critical] + background = "#000000" + foreground = "#ffffff" + frame_color = "#ff0000" + timeout = 0 + # Icon for notifications with critical urgency, uncomment to enable + #icon = /path/to/icon + +# Every section that isn't one of the above is interpreted as a rules to +# override settings for certain messages. +# +# Messages can be matched by +# appname (discouraged, see desktop_entry) +# body +# category +# desktop_entry +# icon +# match_transient +# msg_urgency +# stack_tag +# summary +# +# and you can override the +# background +# foreground +# format +# frame_color +# fullscreen +# new_icon +# set_stack_tag +# set_transient +# timeout +# urgency +# +# Shell-like globbing will get expanded. +# +# Instead of the appname filter, it's recommended to use the desktop_entry filter. +# GLib based applications export their desktop-entry name. In comparison to the appname, +# the desktop-entry won't get localized. +# +# SCRIPTING +# You can specify a script that gets run when the rule matches by +# setting the "script" option. +# The script will be called as follows: +# script appname summary body icon urgency +# where urgency can be "LOW", "NORMAL" or "CRITICAL". +# +# NOTE: if you don't want a notification to be displayed, set the format +# to "". +# NOTE: It might be helpful to run dunst -print in a terminal in order +# to find fitting options for rules. + +# Disable the transient hint so that idle_threshold cannot be bypassed from the +# client +#[transient_disable] +# match_transient = yes +# set_transient = no +# +# Make the handling of transient notifications more strict by making them not +# be placed in history. +#[transient_history_ignore] +# match_transient = yes +# history_ignore = yes + +# fullscreen values +# show: show the notifications, regardless if there is a fullscreen window opened +# delay: displays the new notification, if there is no fullscreen window active +# If the notification is already drawn, it won't get undrawn. +# pushback: same as delay, but when switching into fullscreen, the notification will get +# withdrawn from screen again and will get delayed like a new notification +#[fullscreen_delay_everything] +# fullscreen = delay +#[fullscreen_show_critical] +# msg_urgency = critical +# fullscreen = show + +#[espeak] +# summary = "*" +# script = dunst_espeak.sh + +#[script-test] +# summary = "*script*" +# script = dunst_test.sh + +#[ignore] +# # This notification will not be displayed +# summary = "foobar" +# format = "" + +#[history-ignore] +# # This notification will not be saved in history +# summary = "foobar" +# history_ignore = yes + +#[skip-display] +# # This notification will not be displayed, but will be included in the history +# summary = "foobar" +# skip_display = yes + +#[signed_on] +# appname = Pidgin +# summary = "*signed on*" +# urgency = low +# +#[signed_off] +# appname = Pidgin +# summary = *signed off* +# urgency = low +# +#[says] +# appname = Pidgin +# summary = *says* +# urgency = critical +# +#[twitter] +# appname = Pidgin +# summary = *twitter.com* +# urgency = normal +# +#[stack-volumes] +# appname = "some_volume_notifiers" +# set_stack_tag = "volume" +# +# vim: ft=cfg diff --git a/eww/eww.scss b/eww/eww.scss new file mode 100644 index 0000000..921c28d --- /dev/null +++ b/eww/eww.scss @@ -0,0 +1,79 @@ +* { + all: unset; //Unsets everything so you can style everything from scratch +} + +//Global Styles +.bar { + background-color: #1a1a1a; + color: #b0b4bc; + padding: 2px; + font-family: DaddyTimeMono Nerd Font; + font-size: 13; + opacity: 1.0; +} + +// Styles on classes (see eww.yuck for more information) + +.sidestuff slider { + all: unset; + color: #ffd5cd; +} + +.metric scale trough highlight { + all: unset; + background-color: #D35D6E; + color: #000000; + border-radius: 10px; +} +.metric scale trough { + all: unset; + background-color: #4e4e4e; + border-radius: 50px; + min-height: 3px; + min-width: 50px; + margin-left: 10px; + margin-right: 20px; +} +.metric scale trough highlight { + all: unset; + background-color: #D35D6E; + color: #000000; + border-radius: 2px; +} +.metric scale trough { + all: unset; + background-color: #4e4e4e; + border-radius: 2px; + min-height: 9px; + min-width: 50px; + margin-left: 4px; + margin-right: 4px; +} +.label-ram { + font-size: large; +} + +.workspaces button { + padding: 2px; +} +.workspaces button:hover { + color: #D35D6E; +} +.ws-button-mine { + color: #4e4e4e; + background-color: #ffd5ca; +} +.ws-button-visible { + color: #D35D6E; + background-color: #4e4e4e; +} +.ws-button-urgent { + color: #ffd5ca; + background-color: #D35D6E; +} +.ws-button-busy { + color: #D35D6E; +} +.ws-button { + color: #b0b4bc; +} diff --git a/eww/eww.yuck b/eww/eww.yuck new file mode 100644 index 0000000..059a47c --- /dev/null +++ b/eww/eww.yuck @@ -0,0 +1,86 @@ +(defpoll volume :interval "1s" "scripts/getvol") + +(defwidget bar [index] + (centerbox :orientation "h" + (workspaces :index index) + (music) + (sidestuff))) + +(defwidget sidestuff [] + (box :class "sidestuff" :orientation "h" :space-evenly false :halign "end" + (metric :label "∰" + :value volume + :onchange "amixer sset Master {}%") + (metric :label "🐏" + :value {EWW_RAM.used_mem_perc} + :onchange "") + (metric :label "💾" + :value {round((1 - (EWW_DISK["/"].free / EWW_DISK["/"].total)) * 100, 0)} + :onchange "") + time)) + +(defwidget workspaces [index] + (box :class "workspaces" + :orientation "h" + :space-evenly false + :halign "start" + :spacing 10 + (box + (for tag in '${wmstate.workspaces[index].tags}' + (button + :class {tag.mine ? "ws-button-mine" : + tag.visible ? "ws-button-visible" : + tag.urgent ? "ws-button-urgent" : + tag.busy ? "ws-button-busy" : + "ws-button" + } + :onclick "leftwm-command \"SendWorkspaceToTag ${index} ${tag.index}\"" + {!tag.mine && !tag.busy && !tag.visible && !tag.urgent ? "." : "${tag.name}"} + ) + ) + ) + ) +) + +(defwidget music [] + (box :class "music" + :orientation "h" + :space-evenly false + :halign "center" + {music != "" ? "🎵${music}" : ""})) + + +(defwidget metric [label value onchange] + (box :orientation "h" + :class "metric" + :space-evenly false + (box :class "label" label) + (scale :min 0 + :max 101 + :active {onchange != ""} + :value value + :onchange onchange))) + +(deflisten music :initial "" + "playerctl --follow metadata --format '{{ artist }} - {{ title }}' || true") + +(defpoll time :interval "1s" + "date '+%H:%M:%S %b %d, %Y'") + +(deflisten wmstate + :initial '{"workspaces":[{"layout":"","tags":[{"name":"","index":0,"mine":false,"busy":false,"visible":false,"urgent":false}]}]}' + "leftwm state" +) + +(defwindow bar [index] + :monitor index + :windowtype "dock" + :geometry (geometry :x "0%" + :y "0%" + :width "100%" + :height "8px" + :anchor "top center") + :reserve (struts :side "top" :distance "30px") + :exclusive true + (bar :index index) +) diff --git a/eww/scripts/getvol b/eww/scripts/getvol new file mode 100755 index 0000000..cf5b151 --- /dev/null +++ b/eww/scripts/getvol @@ -0,0 +1,3 @@ +#!/bin/sh + +amixer sget Master | grep "Left" | awk -F'[][]' '{ print $2 }' | tr -d '\n%' diff --git a/hardware/chell.nix b/hardware/chell.nix new file mode 100644 index 0000000..8cb17dc --- /dev/null +++ b/hardware/chell.nix @@ -0,0 +1,52 @@ +# Do not modify this file! It was generated by ‘nixos-generate-config’ +# and may be overwritten by future invocations. Please make changes +# to /etc/nixos/configuration.nix instead. +{ config, lib, pkgs, modulesPath, ... }: + +{ + imports = + [ (modulesPath + "/installer/scan/not-detected.nix") + ]; + + boot.initrd.availableKernelModules = [ "xhci_pci" "ehci_pci" "ahci" "usb_storage" "usbhid" "sd_mod" ]; + boot.initrd.kernelModules = [ ]; + boot.kernelModules = [ "kvm-intel" ]; + boot.extraModulePackages = [ ]; + + fileSystems."/" = + { device = "/dev/disk/by-uuid/faf9e2b9-5362-4637-aa12-78e2ff0ae9ca"; + fsType = "ext4"; + }; + + fileSystems."/boot" = + { device = "/dev/disk/by-uuid/F1A2-55DA"; + fsType = "vfat"; + }; + + fileSystems."/Helium" = + { device = "/dev/disk/by-uuid/0cb2606b-8692-4538-a9ad-288e8597b8a4"; + fsType = "ext4"; + }; + + fileSystems."/Barium" = + { device = "/dev/disk/by-uuid/2ce586a1-e8f1-4a0d-bb44-ff3d1f8a79fc"; + fsType = "ext4"; + }; + + fileSystems."/Chlor" = + { device = "/dev/disk/by-uuid/55b5d373-8a07-46af-8f73-17e711c0a8d9"; + fsType = "ext4"; + }; + + swapDevices = [ ]; + + # Enables DHCP on each ethernet and wireless interface. In case of scripted networking + # (the default) this is the recommended approach. When using systemd-networkd it's + # still possible to use this option, but it's recommended to use it in conjunction + # with explicit per-interface declarations with `networking.interfaces..useDHCP`. + networking.useDHCP = lib.mkDefault true; + # networking.interfaces.enp5s0.useDHCP = lib.mkDefault true; + + nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; + hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; +} diff --git a/hardware/lamarr.nix b/hardware/lamarr.nix new file mode 100644 index 0000000..c69dcc9 --- /dev/null +++ b/hardware/lamarr.nix @@ -0,0 +1,39 @@ +# Do not modify this file! It was generated by ‘nixos-generate-config’ +# and may be overwritten by future invocations. Please make changes +# to /etc/nixos/configuration.nix instead. +{ config, lib, pkgs, modulesPath, ... }: + +{ + imports = + [ (modulesPath + "/installer/scan/not-detected.nix") + ]; + + boot.initrd.availableKernelModules = [ "xhci_pci" "ahci" "usb_storage" "sd_mod" "rtsx_pci_sdmmc" ]; + boot.initrd.kernelModules = [ ]; + boot.kernelModules = [ "kvm-intel" ]; + boot.extraModulePackages = [ ]; + + fileSystems."/" = + { device = "/dev/disk/by-uuid/b203a7f3-1328-4702-bea5-f29a946b93be"; + fsType = "ext4"; + }; + + fileSystems."/boot" = + { device = "/dev/disk/by-uuid/312E-3729"; + fsType = "vfat"; + options = [ "fmask=0077" "dmask=0077" ]; + }; + + swapDevices = [ ]; + + # Enables DHCP on each ethernet and wireless interface. In case of scripted networking + # (the default) this is the recommended approach. When using systemd-networkd it's + # still possible to use this option, but it's recommended to use it in conjunction + # with explicit per-interface declarations with `networking.interfaces..useDHCP`. + networking.useDHCP = lib.mkDefault true; + # networking.interfaces.enp0s31f6.useDHCP = lib.mkDefault true; + # networking.interfaces.wlp4s0.useDHCP = lib.mkDefault true; + + nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; + hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; +} diff --git a/helix/config.toml b/helix/config.toml new file mode 100644 index 0000000..d5fd062 --- /dev/null +++ b/helix/config.toml @@ -0,0 +1,42 @@ +theme = "ayu_mirage" + +[editor] +bufferline = "multiple" +color-modes = true +cursorline = true +line-number = "relative" +gutters = ["diagnostics", "spacer", "line-numbers", "spacer", "diff"] +rulers = [80] + +[editor.cursor-shape] +insert = "bar" +normal = "block" +select = "underline" + +[editor.file-picker] +hidden = false + +[editor.statusline] +left = ["mode", "spinner", "read-only-indicator", "version-control"] +center = ["file-modification-indicator", "file-name", "separator", "file-type"] + +[editor.lsp] +display-messages = true + +[editor.whitespace] +render = "all" +[editor.whitespace.characters] +space = "·" +nbsp = "⍽" +nnbsp = "␣" +tab = "→" +newline = "⏎" +tabpad = "·" + +[editor.indent-guides] +render = true +character = "╎" # Some characters that work well: "▏", "┆", "┊", "⸽" +skip-levels = 1 + +[keys.normal] +";" = "command_mode" # Use ; instead of : to type commands without shifting. diff --git a/helix/languages.toml b/helix/languages.toml new file mode 100644 index 0000000..0b2eef1 --- /dev/null +++ b/helix/languages.toml @@ -0,0 +1,42 @@ +use-grammars = { only = [ "asciidoc", "c", "c-sharp", "latex", "rust" ] } + +# [[language]] +# name = "asciidoc" +# scope = "source.asciidoc" +# auto-format = false +# comment-tokens = ["//"] +# block-comment-tokens = [ +# { start = "////", end = "////"}, +# { start = "[comment]\n--", end = "--" }, +# { start = "[comment]\n", end = "\n\n" } +# ] +# file-types = ["adoc", "asciidoc", "asciidoctor"] +# shebangs = ["asciidoctor"] + +[language-server.clangd.config] +fallbackFlags = [ "-std=c23" ] + +[[language]] +name = "cpp" +file-types = ["cc", "hh", "c++", "cpp", "hpp", "ipp", "tpp", "cxx", "hxx", "ixx", "txx", "ino", "C", "H", "cu", "cuh", "cppm", "h++", "ii", "inl", { glob = ".hpp.in" }] + +[[language]] +name = "c" +auto-format = true +file-types = ["c", "h", { glob = ".h.in" }] +indent = { tab-width = 4, unit = "\t" } + +[[language]] +name = "toml" +indent = { tab-width = 4, unit = "\t" } + +[[language]] +name = "asciidoc" +scope = "source.adoc" +file-types = ["adoc", "asciidoc", "asciidoctor"] +shebangs = ["asciidoctor"] +grammar = "asciidoc" + +[[grammar]] +name = "asciidoc" +source = { git = "https://github.com/cathaysia/tree-sitter-asciidoc", rev = "241f0c1ffeab76fef463be28c7c498757dedd7ee", subpath = "tree-sitter-asciidoc" } diff --git a/helix/themes/doge.toml b/helix/themes/doge.toml new file mode 100644 index 0000000..c132404 --- /dev/null +++ b/helix/themes/doge.toml @@ -0,0 +1,64 @@ +"ui.background" = { bg = "very-dark-brown" } +"ui.cursor" = { bg = "white" } +"ui.cursor.match" = { fg = "black", bg = "light-gray" } +"ui.cursor.primary" = { fg = "black", bg = "white" } +"ui.cursorline.primary" = { bg = "dark-brown" } +"ui.gutter" = { bg = "dark-brown" } +"ui.gutter.selected" = { fg = "light-orange", bg = "dark-brown", modifiers = ["italic", "bold"] } +"ui.text" = "light-gray-brown" +"ui.selection" = { fg = "black", bg = "light-gray" } +"ui.statusline" = { bg = "dark-brown" } +"ui.statusline.normal" = { fg = "dark-brown", bg = "blue", modifiers = ["bold"] } +"ui.statusline.insert" = { fg = "dark-brown", bg = "green", modifiers = ["bold"] } +"ui.statusline.select" = { fg = "dark-brown", bg = "purple", modifiers = ["bold"] } +"ui.menu" = { bg = "very-dark-brown" } +"ui.virtual" = "gray" +"ui.virtual.ruler" = { bg = "gray" } + +"comment" = "blue" +"constant" = "orange" +"constructor" = "purple" +"constant.builtin" = "cyan" +"constant.character.escape" = "cyan" +"constant.numeric" = "orange" +"diff.plus" = "green" +"diff.minus" = "red" +"diff.delta" = "orange" +"function" = "light-orange" +"function.special" = "yellow" +"keyword" = "red" +"keyword.operator" = "light-orange" +"keyword.storage" = { fg = "red", modifiers = ["italic"] } +"label" = "green" +"namespace" = "light-brown" +"operator" = "blue" +"punctuation" = "orange" +"special" = { fg = "red", modifiers = ["italic"] } +"string" = "yellow" +"string.regexp" = "cyan" +"string.symbol" = "orange" +"string.url" = "red" +"type" = "orange" +"variable" = { fg = "green", modifiers = ["italic"] } +"variable.parameter" = "cyan" + +[palette] +very-light-gray = "#c5c8c6" +light-gray = "#969896" +semilight-gray = "#3c3f45" +gray = "#373b41" +dark-gray = "#282a2e" +dark-brown = "#4e4343" +very-dark-brown = "#2b2525" +brown = "#7c6645" +light-gray-brown = "#a59797" +light-brown = "#b29a74" +cyan = "#63e2ba" +blue = "#00bfff" +purple = "#c679dd" +# green = "#7acc61" # "#009e56" +green = "#24ff7f" +red = "#fe5f55" +orange = "#de935f" +light-orange = "#f0c674" +yellow = "#e0ea5d" # "#cccc3f" diff --git a/helix/themes/doom_acario_transparent.toml b/helix/themes/doom_acario_transparent.toml new file mode 100644 index 0000000..f6229a5 --- /dev/null +++ b/helix/themes/doom_acario_transparent.toml @@ -0,0 +1,2 @@ +inherits = "doom_acario_dark" +"ui.background" = {} diff --git a/helix/themes/iroaseta_transparent.toml b/helix/themes/iroaseta_transparent.toml new file mode 100644 index 0000000..294a445 --- /dev/null +++ b/helix/themes/iroaseta_transparent.toml @@ -0,0 +1,2 @@ +inherits = "iroaseta" +"ui.background" = {} diff --git a/leftwm/config_chell.ron b/leftwm/config_chell.ron new file mode 100644 index 0000000..3b3612d --- /dev/null +++ b/leftwm/config_chell.ron @@ -0,0 +1,137 @@ +// _ ___ ___ _ +// | | / __)_ / __|_) +// | | ____| |__| |_ _ _ _ ____ ____ ___ ____ | |__ _ ____ ____ ___ ____ +// | |/ _ ) __) _) | | | \ / ___) _ \| _ \| __) |/ _ | / ___) _ \| _ \ +// | ( (/ /| | | |_| | | | | | | ( (__| |_| | | | | | | ( ( | |_| | | |_| | | | | +// |_|\____)_| \___)____|_|_|_| \____)___/|_| |_|_| |_|\_|| (_)_| \___/|_| |_| +// A WindowManager for Adventurers (____/ +// For info about configuration please visit https://github.com/leftwm/leftwm/wiki + +#![enable(implicit_some)] +#![enable(unwrap_newtypes)] +( + modkey: "Mod1", + mousekey: "Mod1", + workspaces: [ + (output: "DP-1", x: 0, y: 0, width: 1920, height: 1080), + (output: "DP-2", x: 1920, y: 0, width: 3840, height: 2160), + (output: "HDMI-1", x: 5760, y: 0, width: 1920, height: 1080) + ], + tags: [ + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + "10", + "11", + "12" + ], + max_window_width: None, + layouts: [ + "MainAndVertStack", + "EvenHorizontal", + "Grid", + ], + layout_definitions: [ + (name: "MainAndVertStack", flip: None, rotate: North, reserve: None, columns: (flip: None, rotate: North, main: (count: 1, size: 0.5, flip: None, rotate: North, split: Vertical), stack: (flip: None, rotate: North, split: Horizontal), second_stack: None)), + (name: "EvenHorizontal", flip: None, rotate: North, reserve: None, columns: (flip: None, rotate: North, main: None, stack: (flip: None, rotate: North, split: Vertical), second_stack: None)), + (name: "Monocle", flip: None, rotate: North, reserve: None, columns: (flip: None, rotate: North, main: None, stack: (flip: None, rotate: North, split: None), second_stack: None)), + (name: "Grid", flip: None, rotate: North, reserve: None, columns: (flip: None, rotate: North, main: None, stack: (flip: None, rotate: North, split: Grid), second_stack: None)), + (name: "Fibonacci", flip: None, rotate: North, reserve: None, columns: (flip: None, rotate: North, main: (count: 1, size: 0.5, flip: None, rotate: North, split: Vertical), stack: (flip: None, rotate: North, split: Fibonacci), second_stack: None)), + (name: "Dwindle", flip: None, rotate: North, reserve: None, columns: (flip: None, rotate: North, main: (count: 1, size: 0.5, flip: None, rotate: North, split: Vertical), stack: (flip: None, rotate: North, split: Dwindle), second_stack: None)), + ], + layout_mode: Tag, + insert_behavior: Bottom, + scratchpad: [ + (name: "Alacritty", value: "alacritty", x: 10, y: 32, width: 1900, height: 200), + ], + window_rules: [], + disable_current_tag_swap: false, + disable_tile_drag: false, + disable_window_snap: true, + focus_behaviour: Sloppy, + focus_new_windows: true, + single_window_border: true, + sloppy_mouse_follows_focus: true, + create_follows_cursor: None, + auto_derive_workspaces: true, + disable_cursor_reposition_on_resize: false, + keybind: [ + // General keybinds + (command: HardReload, value: "", modifier: ["modkey", "Shift"], key: "b"), + (command: SoftReload, value: "", modifier: ["modkey", "Shift"], key: "r"), + (command: Execute, value: "loginctl kill-session $XDG_SESSION_ID", modifier: ["modkey", "Shift"], key: "x"), + (command: Execute, value: "slock", modifier: ["modkey", "Control"], key: "l"), + (command: Execute, value: "rofi -show run", modifier: ["modkey"], key: "p"), + (command: ToggleScratchPad, value: "Alacritty", modifier: ["modkey", "Shift"], key: "p"), + (command: Execute, value: "maim -s --format png /dev/stdout | xclip -selection clipboard -t image/png -i", modifier: ["modkey"], key: "d"), + // Application keybinds + // (command: Execute, value: "sh -e dmenu_run", modifier: ["modkey"], key: "p"), + (command: Execute, value: "alacritty", modifier: ["modkey", "Shift"], key: "Return"), + (command: Execute, value: "firefox", modifier: ["modkey"], key: "i"), + (command: Execute, value: "brave", modifier: ["modkey", "Shift"], key: "i"), + (command: Execute, value: "steam", modifier: ["modkey", "Shift"], key: "s"), + (command: Execute, value: "obs", modifier: ["modkey", "Shift"], key: "o"), + (command: Execute, value: "telegram-desktop", modifier: ["modkey", "Control"], key: "t"), + (command: Execute, value: "signal-desktop", modifier: ["modkey", "Control"], key: "s"), + (command: Execute, value: "element-desktop", modifier: ["modkey", "Control"], key: "e"), + (command: Execute, value: "webcord", modifier: ["modkey", "Control"], key: "d"), + (command: Execute, value: "mumble", modifier: ["modkey"], key: "m"), + // Window keybinds + (command: ToggleFullScreen, value: "", modifier: ["modkey"], key: "f"), + (command: SwapTags, value: "", modifier: ["modkey"], key: "w"), + (command: MoveToLastWorkspace, value: "", modifier: ["modkey", "Shift"], key: "w"), + (command: CloseWindow, value: "", modifier: ["modkey", "Shift"], key: "c"), + (command: FloatingToTile, value: "", modifier: ["modkey"], key: "t"), + (command: MoveWindowUp, value: "", modifier: ["modkey", "Shift"], key: "k"), + (command: MoveWindowUp, value: "", modifier: ["modkey", "Shift"], key: "Up"), + (command: MoveWindowDown, value: "", modifier: ["modkey", "Shift"], key: "j"), + (command: MoveWindowDown, value: "", modifier: ["modkey", "Shift"], key: "Down"), + (command: MoveWindowTop, value: "", modifier: ["modkey"], key: "Return"), + (command: FocusWindowUp, value: "", modifier: ["modkey"], key: "k"), + (command: FocusWindowUp, value: "", modifier: ["modkey"], key: "Up"), + (command: FocusWindowDown, value: "", modifier: ["modkey"], key: "j"), + (command: FocusWindowDown, value: "", modifier: ["modkey"], key: "Down"), + // Layout keybinds + (command: NextLayout, value: "", modifier: ["modkey", "Control"], key: "k"), + (command: PreviousLayout, value: "", modifier: ["modkey", "Control"], key: "j"), + (command: FocusWorkspaceNext, value: "", modifier: ["modkey"], key: "l"), + (command: FocusWorkspacePrevious, value: "", modifier: ["modkey"], key: "h"), + + (command: NextLayout, value: "", modifier: ["modkey", "Control"], key: "Up"), + (command: PreviousLayout, value: "", modifier: ["modkey", "Control"], key: "Down"), + (command: FocusWorkspaceNext, value: "", modifier: ["modkey"], key: "Right"), + (command: FocusWorkspacePrevious, value: "", modifier: ["modkey"], key: "Left"), + // Tag keybinds + (command: GotoTag, value: "1", modifier: ["modkey"], key: "F1"), + (command: GotoTag, value: "2", modifier: ["modkey"], key: "F2"), + (command: GotoTag, value: "3", modifier: ["modkey"], key: "F3"), + (command: GotoTag, value: "4", modifier: ["modkey"], key: "F4"), + (command: GotoTag, value: "5", modifier: ["modkey"], key: "F5"), + (command: GotoTag, value: "6", modifier: ["modkey"], key: "F6"), + (command: GotoTag, value: "7", modifier: ["modkey"], key: "F7"), + (command: GotoTag, value: "8", modifier: ["modkey"], key: "F8"), + (command: GotoTag, value: "9", modifier: ["modkey"], key: "F9"), + (command: GotoTag, value: "10", modifier: ["modkey"], key: "F10"), + (command: GotoTag, value: "11", modifier: ["modkey"], key: "F11"), + (command: GotoTag, value: "12", modifier: ["modkey"], key: "F12"), + (command: MoveToTag, value: "1", modifier: ["modkey", "Shift"], key: "F1"), + (command: MoveToTag, value: "2", modifier: ["modkey", "Shift"], key: "F2"), + (command: MoveToTag, value: "3", modifier: ["modkey", "Shift"], key: "F3"), + (command: MoveToTag, value: "4", modifier: ["modkey", "Shift"], key: "F4"), + (command: MoveToTag, value: "5", modifier: ["modkey", "Shift"], key: "F5"), + (command: MoveToTag, value: "6", modifier: ["modkey", "Shift"], key: "F6"), + (command: MoveToTag, value: "7", modifier: ["modkey", "Shift"], key: "F7"), + (command: MoveToTag, value: "8", modifier: ["modkey", "Shift"], key: "F8"), + (command: MoveToTag, value: "9", modifier: ["modkey", "Shift"], key: "F9"), + (command: MoveToTag, value: "10", modifier: ["modkey", "Shift"], key: "F10"), + (command: MoveToTag, value: "11", modifier: ["modkey", "Shift"], key: "F11"), + (command: MoveToTag, value: "12", modifier: ["modkey", "Shift"], key: "F12"), + ], + state_path: None, +) diff --git a/leftwm/config_lamarr.ron b/leftwm/config_lamarr.ron new file mode 100644 index 0000000..a12b846 --- /dev/null +++ b/leftwm/config_lamarr.ron @@ -0,0 +1,135 @@ +// _ ___ ___ _ +// | | / __)_ / __|_) +// | | ____| |__| |_ _ _ _ ____ ____ ___ ____ | |__ _ ____ ____ ___ ____ +// | |/ _ ) __) _) | | | \ / ___) _ \| _ \| __) |/ _ | / ___) _ \| _ \ +// | ( (/ /| | | |_| | | | | | | ( (__| |_| | | | | | | ( ( | |_| | | |_| | | | | +// |_|\____)_| \___)____|_|_|_| \____)___/|_| |_|_| |_|\_|| (_)_| \___/|_| |_| +// A WindowManager for Adventurers (____/ +// For info about configuration please visit https://github.com/leftwm/leftwm/wiki + +#![enable(implicit_some)] +#![enable(unwrap_newtypes)] +( + modkey: "Mod4", + mousekey: "Mod4", + workspaces: [ + (output: "eDP-1", x: 0, y: 0, width: 1920, height: 1080) + ], + tags: [ + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + "10", + "11", + "12" + ], + max_window_width: None, + layouts: [ + "MainAndVertStack", + "EvenHorizontal", + "Grid", + ], + layout_definitions: [ + (name: "MainAndVertStack", flip: None, rotate: North, reserve: None, columns: (flip: None, rotate: North, main: (count: 1, size: 0.5, flip: None, rotate: North, split: Vertical), stack: (flip: None, rotate: North, split: Horizontal), second_stack: None)), + (name: "EvenHorizontal", flip: None, rotate: North, reserve: None, columns: (flip: None, rotate: North, main: None, stack: (flip: None, rotate: North, split: Vertical), second_stack: None)), + (name: "Monocle", flip: None, rotate: North, reserve: None, columns: (flip: None, rotate: North, main: None, stack: (flip: None, rotate: North, split: None), second_stack: None)), + (name: "Grid", flip: None, rotate: North, reserve: None, columns: (flip: None, rotate: North, main: None, stack: (flip: None, rotate: North, split: Grid), second_stack: None)), + (name: "Fibonacci", flip: None, rotate: North, reserve: None, columns: (flip: None, rotate: North, main: (count: 1, size: 0.5, flip: None, rotate: North, split: Vertical), stack: (flip: None, rotate: North, split: Fibonacci), second_stack: None)), + (name: "Dwindle", flip: None, rotate: North, reserve: None, columns: (flip: None, rotate: North, main: (count: 1, size: 0.5, flip: None, rotate: North, split: Vertical), stack: (flip: None, rotate: North, split: Dwindle), second_stack: None)), + ], + layout_mode: Tag, + insert_behavior: Bottom, + scratchpad: [ + (name: "Alacritty", value: "alacritty", x: 10, y: 32, width: 1900, height: 200), + ], + window_rules: [], + disable_current_tag_swap: false, + disable_tile_drag: false, + disable_window_snap: true, + focus_behaviour: Sloppy, + focus_new_windows: true, + single_window_border: true, + sloppy_mouse_follows_focus: true, + create_follows_cursor: None, + auto_derive_workspaces: true, + disable_cursor_reposition_on_resize: false, + keybind: [ + // General keybinds + (command: HardReload, value: "", modifier: ["modkey", "Shift"], key: "b"), + (command: SoftReload, value: "", modifier: ["modkey", "Shift"], key: "r"), + (command: Execute, value: "loginctl kill-session $XDG_SESSION_ID", modifier: ["modkey", "Shift"], key: "x"), + (command: Execute, value: "slock", modifier: ["modkey", "Control"], key: "l"), + (command: Execute, value: "rofi -show run", modifier: ["modkey"], key: "p"), + (command: ToggleScratchPad, value: "Alacritty", modifier: ["modkey", "Shift"], key: "p"), + (command: Execute, value: "maim -s --format png /dev/stdout | xclip -selection clipboard -t image/png -i", modifier: ["modkey"], key: "d"), + // Application keybinds + // (command: Execute, value: "sh -e dmenu_run", modifier: ["modkey"], key: "p"), + (command: Execute, value: "alacritty", modifier: ["modkey", "Shift"], key: "Return"), + (command: Execute, value: "firefox", modifier: ["modkey"], key: "i"), + (command: Execute, value: "brave", modifier: ["modkey", "Shift"], key: "i"), + (command: Execute, value: "steam", modifier: ["modkey", "Shift"], key: "s"), + (command: Execute, value: "obs", modifier: ["modkey", "Shift"], key: "o"), + (command: Execute, value: "telegram-desktop", modifier: ["modkey", "Control"], key: "t"), + (command: Execute, value: "signal-desktop", modifier: ["modkey", "Control"], key: "s"), + (command: Execute, value: "element-desktop", modifier: ["modkey", "Control"], key: "e"), + (command: Execute, value: "webcord", modifier: ["modkey", "Control"], key: "d"), + (command: Execute, value: "mumble", modifier: ["modkey"], key: "m"), + // Window keybinds + (command: ToggleFullScreen, value: "", modifier: ["modkey"], key: "f"), + (command: SwapTags, value: "", modifier: ["modkey"], key: "w"), + (command: MoveToLastWorkspace, value: "", modifier: ["modkey", "Shift"], key: "w"), + (command: CloseWindow, value: "", modifier: ["modkey", "Shift"], key: "c"), + (command: FloatingToTile, value: "", modifier: ["modkey"], key: "t"), + (command: MoveWindowUp, value: "", modifier: ["modkey", "Shift"], key: "k"), + (command: MoveWindowUp, value: "", modifier: ["modkey", "Shift"], key: "Up"), + (command: MoveWindowDown, value: "", modifier: ["modkey", "Shift"], key: "j"), + (command: MoveWindowDown, value: "", modifier: ["modkey", "Shift"], key: "Down"), + (command: MoveWindowTop, value: "", modifier: ["modkey"], key: "Return"), + (command: FocusWindowUp, value: "", modifier: ["modkey"], key: "k"), + (command: FocusWindowUp, value: "", modifier: ["modkey"], key: "Up"), + (command: FocusWindowDown, value: "", modifier: ["modkey"], key: "j"), + (command: FocusWindowDown, value: "", modifier: ["modkey"], key: "Down"), + // Layout keybinds + (command: NextLayout, value: "", modifier: ["modkey", "Control"], key: "k"), + (command: PreviousLayout, value: "", modifier: ["modkey", "Control"], key: "j"), + (command: FocusWorkspaceNext, value: "", modifier: ["modkey"], key: "l"), + (command: FocusWorkspacePrevious, value: "", modifier: ["modkey"], key: "h"), + + (command: NextLayout, value: "", modifier: ["modkey", "Control"], key: "Up"), + (command: PreviousLayout, value: "", modifier: ["modkey", "Control"], key: "Down"), + (command: FocusWorkspaceNext, value: "", modifier: ["modkey"], key: "Right"), + (command: FocusWorkspacePrevious, value: "", modifier: ["modkey"], key: "Left"), + // Tag keybinds + (command: GotoTag, value: "1", modifier: ["modkey"], key: "F1"), + (command: GotoTag, value: "2", modifier: ["modkey"], key: "F2"), + (command: GotoTag, value: "3", modifier: ["modkey"], key: "F3"), + (command: GotoTag, value: "4", modifier: ["modkey"], key: "F4"), + (command: GotoTag, value: "5", modifier: ["modkey"], key: "F5"), + (command: GotoTag, value: "6", modifier: ["modkey"], key: "F6"), + (command: GotoTag, value: "7", modifier: ["modkey"], key: "F7"), + (command: GotoTag, value: "8", modifier: ["modkey"], key: "F8"), + (command: GotoTag, value: "9", modifier: ["modkey"], key: "F9"), + (command: GotoTag, value: "10", modifier: ["modkey"], key: "F10"), + (command: GotoTag, value: "11", modifier: ["modkey"], key: "F11"), + (command: GotoTag, value: "12", modifier: ["modkey"], key: "F12"), + (command: MoveToTag, value: "1", modifier: ["modkey", "Shift"], key: "F1"), + (command: MoveToTag, value: "2", modifier: ["modkey", "Shift"], key: "F2"), + (command: MoveToTag, value: "3", modifier: ["modkey", "Shift"], key: "F3"), + (command: MoveToTag, value: "4", modifier: ["modkey", "Shift"], key: "F4"), + (command: MoveToTag, value: "5", modifier: ["modkey", "Shift"], key: "F5"), + (command: MoveToTag, value: "6", modifier: ["modkey", "Shift"], key: "F6"), + (command: MoveToTag, value: "7", modifier: ["modkey", "Shift"], key: "F7"), + (command: MoveToTag, value: "8", modifier: ["modkey", "Shift"], key: "F8"), + (command: MoveToTag, value: "9", modifier: ["modkey", "Shift"], key: "F9"), + (command: MoveToTag, value: "10", modifier: ["modkey", "Shift"], key: "F10"), + (command: MoveToTag, value: "11", modifier: ["modkey", "Shift"], key: "F11"), + (command: MoveToTag, value: "12", modifier: ["modkey", "Shift"], key: "F12"), + ], + state_path: None, +) diff --git a/leftwm/themes/current/background.jpeg b/leftwm/themes/current/background.jpeg new file mode 100644 index 0000000..e4c7e06 Binary files /dev/null and b/leftwm/themes/current/background.jpeg differ diff --git a/leftwm/themes/current/down b/leftwm/themes/current/down new file mode 100755 index 0000000..2e0acbb --- /dev/null +++ b/leftwm/themes/current/down @@ -0,0 +1,19 @@ +#!/usr/bin/env bash + +SCRIPTPATH="$( cd "$(dirname "$0")" ; pwd -P )" + +#set background +if [ -x "$(command -v feh)" ]; then + feh --bg-scale $SCRIPTPATH/down.jpg +fi + +leftwm-command "UnloadTheme" + +pkill compton +pkill picom +pkill polybar +pkill conky +pkill dunst +if [ -x "$(command -v eww)" ]; then + eww kill +fi diff --git a/leftwm/themes/current/down.jpg b/leftwm/themes/current/down.jpg new file mode 100644 index 0000000..da757f7 Binary files /dev/null and b/leftwm/themes/current/down.jpg differ diff --git a/leftwm/themes/current/sizes.liquid b/leftwm/themes/current/sizes.liquid new file mode 100644 index 0000000..36f4c00 --- /dev/null +++ b/leftwm/themes/current/sizes.liquid @@ -0,0 +1,3 @@ +{% for workspace in workspaces %} +{{workspace.w}}x{{workspace.h}}+{{workspace.x}}+{{workspace.y}} +{% endfor %} diff --git a/leftwm/themes/current/template.liquid b/leftwm/themes/current/template.liquid new file mode 100644 index 0000000..8e0febe --- /dev/null +++ b/leftwm/themes/current/template.liquid @@ -0,0 +1,19 @@ +{% assign mine_open = ' (button :class "ws-button-mine" :onclick "leftwm-command \"SendWorkspaceToTag ' %} +{% assign visible_open = ' (button :class "ws-button-visible" :onclick "leftwm-command \"SendWorkspaceToTag ' %} +{% assign busy_open = ' (button :class "ws-button-busy" :onclick "leftwm-command \"SendWorkspaceToTag ' %} +{% assign close = '`)' %} +{% assign unoccupied = ' (button :class "ws-button" :onclick "leftwm-command \"SendWorkspaceToTag ' %} + +{{'(box :class "workspaces" :orientation "h" :space-evenly true :halign "start" :spacing 10'}} +{% for tag in workspace.tags %} +{% if tag.mine %} +{{mine_open}}{{workspace.index | append: ' ' | append: tag.index | append: '\"" `'}}{{ tag.name }}{{close}} +{% elsif tag.visible %} +{{visible_open}}{{workspace.index | append: ' ' | append: tag.index | append: '\"" `'}}{{ tag.name }}{{close}} +{% elsif tag.busy %} +{{busy_open}}{{workspace.index | append: ' ' | append: tag.index | append: '\"" `'}}{{ tag.name }}{{close}} +{% else %} +{{unoccupied}}{{workspace.index | append: ' ' | append: tag.index | append: '\"" `'}}{{ "·" }}{{close}} +{% endif %} +{% endfor %} +{{")"}} diff --git a/leftwm/themes/current/theme.ron b/leftwm/themes/current/theme.ron new file mode 100644 index 0000000..24a6139 --- /dev/null +++ b/leftwm/themes/current/theme.ron @@ -0,0 +1,7 @@ +( + border_width: 2, + margin: 4, + default_border_color: "#37474F", + floating_border_color: "#225588", + focused_border_color: "#885522", +) diff --git a/leftwm/themes/current/up b/leftwm/themes/current/up new file mode 100755 index 0000000..bb91270 --- /dev/null +++ b/leftwm/themes/current/up @@ -0,0 +1,51 @@ +#!/usr/bin/env bash +export SCRIPTPATH="$( cd "$(dirname "$0")" ; pwd -P )" + +#if path to liblinkt is not not exported do so: +if [ -z "$LD_LIBRARY_PATH" ]; then + export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/local/lib" +fi + +# Down the last running theme +if [ -f "/tmp/leftwm-theme-down" ]; then + /tmp/leftwm-theme-down + rm /tmp/leftwm-theme-down +fi +ln -s $SCRIPTPATH/down /tmp/leftwm-theme-down + +# start eww daemon +eww daemon & + +# Boot picom or compton if it exists +if [ -x "$(command -v picom)" ]; then + picom &> /dev/null & + # picom &> /dev/null & +elif [ -x "$(command -v compton)" ]; then + compton &> /dev/null & +fi + +# Set the theme.ron config +leftwm-command "LoadTheme $SCRIPTPATH/theme.ron" + +# Set background +if [ -x "$(command -v feh)" ]; then + feh --bg-scale $SCRIPTPATH/background.jpeg +fi + +# Boot dunst as notification daemon +if [ -x "$(command -v dunst)" ]; then + dunst &> /dev/null & +fi + +setxkbmap -layout us -variant dvp -option caps:escape -option compose:Muhenkan + +#open eww 'bar' windows +#this is a bit of an uggly hack, a more elegant way will hopefully be possible with a future `eww` version +sleep 1 +index=0 +sizes=( $(leftwm-state -q -n -t $SCRIPTPATH/sizes.liquid | sed -r '/^\s*$/d' ) ) +for size in "${sizes[@]}" +do + eww open bar --id bar$index --arg index=$index + let index=index+1 +done diff --git a/nushell/config.nu b/nushell/config.nu new file mode 100644 index 0000000..0d32c35 --- /dev/null +++ b/nushell/config.nu @@ -0,0 +1,946 @@ +# Nushell Config File +# +# version = "0.95.0" + +source nix-your-shell.nu + +# Use helix as the default editor +$env.EDITOR = "hx" + +# Enable macro backtraces by default in rust +$env.RUSTFLAGS = "-Zmacro-backtrace" + +# $env.MANPAGER = "sh -c 'col -bx | bat -l man -p'" +$env.MANPAGER = "bat --style=header-filesize,grid,numbers -l man" + +# Change into a different directory and show the contents +def d [$path] { cd $path | ls } +def lt [] { ls | sort-by type name -i | grid -c | str trim } + +alias j = joshuto +alias e = hx . +alias code = cd /Barium/repos/ + +# Go to the repository with the name and start a nix development shell there. +# If no argument is given a nix development shell will be started in the current dir. +# Pass --nonix to skip +def --env dev [project?: string, --nonix (-n)] { + + # Switch directory to the project in case a name was passed + if $project != null { + let path = $"/Barium/repos/($project)" + if ($path | path exists) { + cd $path + } else { + print $"`($path)` is not a valid path. Please make sure the project exists" + return null + } + } + + # Start development shell here if not disabled + if $nonix == false { + print "Starting nix development shell" + nix develop + } +} + +# Grab a quick reference from the saved quick reference handbooks saved and +# display it in the terminal +def qrh [what: string = "sdl"] { + cd /home/zentux/qrh + + # Turn into glab for all files that begin with the topic + let what = $"($what)*" + + # Get matches that could fit the given name + let opts = ls ($what | into glob) + + # Open the matching documents in bat + bat ...$opts.name +} + +# For more information on defining custom themes, see +# https://www.nushell.sh/book/coloring_and_theming.html +# And here is the theme collection +# https://github.com/nushell/nu_scripts/tree/main/themes +let dark_theme = { + # color for nushell primitives + separator: white + leading_trailing_space_bg: { attr: n } # no fg, no bg, attr none effectively turns this off + header: green_bold + empty: blue + # Closures can be used to choose colors for specific values. + # The value (in this case, a bool) is piped into the closure. + # eg) {|| if $in { 'light_cyan' } else { 'light_gray' } } + bool: light_cyan + int: white + filesize: cyan + duration: white + date: purple + range: white + float: white + string: white + nothing: white + binary: white + cell-path: white + row_index: green_bold + record: white + list: white + block: white + hints: dark_gray + search_result: { bg: red fg: white } + shape_and: purple_bold + shape_binary: purple_bold + shape_block: blue_bold + shape_bool: light_cyan + shape_closure: green_bold + shape_custom: green + shape_datetime: cyan_bold + shape_directory: cyan + shape_external: cyan + shape_externalarg: green_bold + shape_external_resolved: light_yellow_bold + shape_filepath: cyan + shape_flag: blue_bold + shape_float: purple_bold + # shapes are used to change the cli syntax highlighting + shape_garbage: { fg: white bg: red attr: b} + shape_glob_interpolation: cyan_bold + shape_globpattern: cyan_bold + shape_int: purple_bold + shape_internalcall: cyan_bold + shape_keyword: cyan_bold + shape_list: cyan_bold + shape_literal: blue + shape_match_pattern: green + shape_matching_brackets: { attr: u } + shape_nothing: light_cyan + shape_operator: yellow + shape_or: purple_bold + shape_pipe: purple_bold + shape_range: yellow_bold + shape_record: cyan_bold + shape_redirection: purple_bold + shape_signature: green_bold + shape_string: green + shape_string_interpolation: cyan_bold + shape_table: blue_bold + shape_variable: purple + shape_vardecl: purple + shape_raw_string: light_purple +} + +let light_theme = { + # color for nushell primitives + separator: dark_gray + leading_trailing_space_bg: { attr: n } # no fg, no bg, attr none effectively turns this off + header: green_bold + empty: blue + # Closures can be used to choose colors for specific values. + # The value (in this case, a bool) is piped into the closure. + # eg) {|| if $in { 'dark_cyan' } else { 'dark_gray' } } + bool: dark_cyan + int: dark_gray + filesize: cyan_bold + duration: dark_gray + date: purple + range: dark_gray + float: dark_gray + string: dark_gray + nothing: dark_gray + binary: dark_gray + cell-path: dark_gray + row_index: green_bold + record: dark_gray + list: dark_gray + block: dark_gray + hints: dark_gray + search_result: { fg: white bg: red } + shape_and: purple_bold + shape_binary: purple_bold + shape_block: blue_bold + shape_bool: light_cyan + shape_closure: green_bold + shape_custom: green + shape_datetime: cyan_bold + shape_directory: cyan + shape_external: cyan + shape_externalarg: green_bold + shape_external_resolved: light_purple_bold + shape_filepath: cyan + shape_flag: blue_bold + shape_float: purple_bold + # shapes are used to change the cli syntax highlighting + shape_garbage: { fg: white bg: red attr: b} + shape_globpattern: cyan_bold + shape_int: purple_bold + shape_internalcall: cyan_bold + shape_keyword: cyan_bold + shape_list: cyan_bold + shape_literal: blue + shape_match_pattern: green + shape_matching_brackets: { attr: u } + shape_nothing: light_cyan + shape_operator: yellow + shape_or: purple_bold + shape_pipe: purple_bold + shape_range: yellow_bold + shape_record: cyan_bold + shape_redirection: purple_bold + shape_signature: green_bold + shape_string: green + shape_string_interpolation: cyan_bold + shape_table: blue_bold + shape_variable: purple + shape_vardecl: purple + shape_raw_string: light_purple +} + +# External completer example +# let carapace_completer = {|spans| +# carapace $spans.0 nushell ...$spans | from json +# } + +# The default config record. This is where much of your global configuration is setup. +$env.config = { + show_banner: false # true or false to enable or disable the welcome banner at startup + + ls: { + use_ls_colors: true # use the LS_COLORS environment variable to colorize output + clickable_links: true # enable or disable clickable links. Your terminal has to support links. + } + + rm: { + always_trash: false # always act as if -t was given. Can be overridden with -p + } + + table: { + mode: compact # basic, compact, compact_double, light, thin, with_love, rounded, reinforced, heavy, none, other + index_mode: always # "always" show indexes, "never" show indexes, "auto" = show indexes when a table has "index" column + show_empty: true # show 'empty list' and 'empty record' placeholders for command output + padding: { left: 1, right: 1 } # a left right padding of each column in a table + trim: { + methodology: wrapping # wrapping or truncating + wrapping_try_keep_words: true # A strategy used by the 'wrapping' methodology + truncating_suffix: "..." # A suffix used by the 'truncating' methodology + } + header_on_separator: false # show header text on separator/border line + # abbreviated_row_count: 10 # limit data rows from top and bottom after reaching a set point + } + + error_style: "fancy" # "fancy" or "plain" for screen reader-friendly error messages + + # datetime_format determines what a datetime rendered in the shell would look like. + # Behavior without this configuration point will be to "humanize" the datetime display, + # showing something like "a day ago." + datetime_format: { + # normal: '%a, %d %b %Y %H:%M:%S %z' # shows up in displays of variables or other datetime's outside of tables + # table: '%m/%d/%y %I:%M:%S%p' # generally shows up in tabular outputs such as ls. commenting this out will change it to the default human readable datetime format + } + + explore: { + status_bar_background: { fg: "#1D1F21", bg: "#C4C9C6" }, + command_bar_text: { fg: "#C4C9C6" }, + highlight: { fg: "black", bg: "yellow" }, + status: { + error: { fg: "white", bg: "red" }, + warn: {} + info: {} + }, + selected_cell: { bg: light_blue }, + } + + history: { + max_size: 100_000 # Session has to be reloaded for this to take effect + sync_on_enter: true # Enable to share history between multiple sessions, else you have to close the session to write history to file + file_format: "plaintext" # "sqlite" or "plaintext" + isolation: false # only available with sqlite file_format. true enables history isolation, false disables it. true will allow the history to be isolated to the current session using up/down arrows. false will allow the history to be shared across all sessions. + } + + completions: { + case_sensitive: false # set to true to enable case-sensitive completions + quick: true # set this to false to prevent auto-selecting completions when only one remains + partial: true # set this to false to prevent partial filling of the prompt + algorithm: "prefix" # prefix or fuzzy + external: { + enable: true # set to false to prevent nushell looking into $env.PATH to find more suggestions, `false` recommended for WSL users as this look up may be very slow + max_results: 100 # setting it lower can improve completion performance at the cost of omitting some options + completer: null # check 'carapace_completer' above as an example + } + use_ls_colors: true # set this to true to enable file/path/directory completions using LS_COLORS + } + + filesize: { + unit: binary + } + + cursor_shape: { + emacs: line # block, underscore, line, blink_block, blink_underscore, blink_line, inherit to skip setting cursor shape (line is the default) + vi_insert: block # block, underscore, line, blink_block, blink_underscore, blink_line, inherit to skip setting cursor shape (block is the default) + vi_normal: underscore # block, underscore, line, blink_block, blink_underscore, blink_line, inherit to skip setting cursor shape (underscore is the default) + } + + color_config: $dark_theme # if you want a more interesting theme, you can replace the empty record with `$dark_theme`, `$light_theme` or another custom record + footer_mode: always # always, never, number_of_rows, auto + float_precision: 2 # the precision for displaying floats in tables + buffer_editor: "" # command that will be used to edit the current line buffer with ctrl+o, if unset fallback to $env.EDITOR and $env.VISUAL + use_ansi_coloring: true + bracketed_paste: true # enable bracketed paste, currently useless on windows + edit_mode: emacs # emacs, vi + shell_integration: { + # osc2 abbreviates the path if in the home_dir, sets the tab/window title, shows the running command in the tab/window title + osc2: true + # osc7 is a way to communicate the path to the terminal, this is helpful for spawning new tabs in the same directory + osc7: true + # osc8 is also implemented as the deprecated setting ls.show_clickable_links, it shows clickable links in ls output if your terminal supports it. show_clickable_links is deprecated in favor of osc8 + osc8: true + # osc9_9 is from ConEmu and is starting to get wider support. It's similar to osc7 in that it communicates the path to the terminal + osc9_9: false + # osc133 is several escapes invented by Final Term which include the supported ones below. + # 133;A - Mark prompt start + # 133;B - Mark prompt end + # 133;C - Mark pre-execution + # 133;D;exit - Mark execution finished with exit code + # This is used to enable terminals to know where the prompt is, the command is, where the command finishes, and where the output of the command is + osc133: true + # osc633 is closely related to osc133 but only exists in visual studio code (vscode) and supports their shell integration features + # 633;A - Mark prompt start + # 633;B - Mark prompt end + # 633;C - Mark pre-execution + # 633;D;exit - Mark execution finished with exit code + # 633;E - NOT IMPLEMENTED - Explicitly set the command line with an optional nonce + # 633;P;Cwd= - Mark the current working directory and communicate it to the terminal + # and also helps with the run recent menu in vscode + osc633: true + # reset_application_mode is escape \x1b[?1l and was added to help ssh work better + reset_application_mode: true + } + render_right_prompt_on_last_line: false # true or false to enable or disable right prompt to be rendered on last line of the prompt. + use_kitty_protocol: false # enables keyboard enhancement protocol implemented by kitty console, only if your terminal support this. + highlight_resolved_externals: false # true enables highlighting of external commands in the repl resolved by which. + recursion_limit: 50 # the maximum number of times nushell allows recursion before stopping it + + plugins: {} # Per-plugin configuration. See https://www.nushell.sh/contributor-book/plugins.html#configuration. + + plugin_gc: { + # Configuration for plugin garbage collection + default: { + enabled: true # true to enable stopping of inactive plugins + stop_after: 10sec # how long to wait after a plugin is inactive to stop it + } + plugins: { + # alternate configuration for specific plugins, by name, for example: + # + # gstat: { + # enabled: false + # } + } + } + + hooks: { + pre_prompt: [{ null }] # run before the prompt is shown + pre_execution: [{ null }] # run before the repl input is run + env_change: { + PWD: [{|before, after| null }] # run if the PWD environment is different since the last repl input + } + display_output: "if (term size).columns >= 100 { table -e } else { table }" # run to display the output of a pipeline + command_not_found: { null } # return an error message when a command is not found + } + + menus: [ + # Configuration for default nushell menus + # Note the lack of source parameter + { + name: completion_menu + only_buffer_difference: false + marker: "| " + type: { + layout: columnar + columns: 4 + col_width: 20 # Optional value. If missing all the screen width is used to calculate column width + col_padding: 2 + } + style: { + text: green + selected_text: { attr: r } + description_text: yellow + match_text: { attr: u } + selected_match_text: { attr: ur } + } + } + { + name: ide_completion_menu + only_buffer_difference: false + marker: "| " + type: { + layout: ide + min_completion_width: 0, + max_completion_width: 50, + max_completion_height: 10, # will be limited by the available lines in the terminal + padding: 0, + border: true, + cursor_offset: 0, + description_mode: "prefer_right" + min_description_width: 0 + max_description_width: 50 + max_description_height: 10 + description_offset: 1 + # If true, the cursor pos will be corrected, so the suggestions match up with the typed text + # + # C:\> str + # str join + # str trim + # str split + correct_cursor_pos: false + } + style: { + text: green + selected_text: { attr: r } + description_text: yellow + match_text: { attr: u } + selected_match_text: { attr: ur } + } + } + { + name: history_menu + only_buffer_difference: true + marker: "? " + type: { + layout: list + page_size: 10 + } + style: { + text: green + selected_text: green_reverse + description_text: yellow + } + } + { + name: help_menu + only_buffer_difference: true + marker: "? " + type: { + layout: description + columns: 4 + col_width: 20 # Optional value. If missing all the screen width is used to calculate column width + col_padding: 2 + selection_rows: 4 + description_rows: 10 + } + style: { + text: green + selected_text: green_reverse + description_text: yellow + } + } + ] + + keybindings: [ + { + name: completion_menu + modifier: none + keycode: tab + mode: [emacs vi_normal vi_insert] + event: { + until: [ + { send: menu name: completion_menu } + { send: menunext } + { edit: complete } + ] + } + } + { + name: ide_completion_menu + modifier: control + keycode: char_n + mode: [emacs vi_normal vi_insert] + event: { + until: [ + { send: menu name: ide_completion_menu } + { send: menunext } + { edit: complete } + ] + } + } + { + name: history_menu + modifier: control + keycode: char_r + mode: [emacs, vi_insert, vi_normal] + event: { send: menu name: history_menu } + } + { + name: help_menu + modifier: none + keycode: f1 + mode: [emacs, vi_insert, vi_normal] + event: { send: menu name: help_menu } + } + { + name: completion_previous_menu + modifier: shift + keycode: backtab + mode: [emacs, vi_normal, vi_insert] + event: { send: menuprevious } + } + { + name: next_page_menu + modifier: control + keycode: char_x + mode: emacs + event: { send: menupagenext } + } + { + name: undo_or_previous_page_menu + modifier: control + keycode: char_z + mode: emacs + event: { + until: [ + { send: menupageprevious } + { edit: undo } + ] + } + } + { + name: escape + modifier: none + keycode: escape + mode: [emacs, vi_normal, vi_insert] + event: { send: esc } # NOTE: does not appear to work + } + { + name: cancel_command + modifier: control + keycode: char_c + mode: [emacs, vi_normal, vi_insert] + event: { send: ctrlc } + } + { + name: quit_shell + modifier: control + keycode: char_d + mode: [emacs, vi_normal, vi_insert] + event: { send: ctrld } + } + { + name: clear_screen + modifier: control + keycode: char_l + mode: [emacs, vi_normal, vi_insert] + event: { send: clearscreen } + } + { + name: search_history + modifier: control + keycode: char_q + mode: [emacs, vi_normal, vi_insert] + event: { send: searchhistory } + } + { + name: open_command_editor + modifier: control + keycode: char_o + mode: [emacs, vi_normal, vi_insert] + event: { send: openeditor } + } + { + name: move_up + modifier: none + keycode: up + mode: [emacs, vi_normal, vi_insert] + event: { + until: [ + { send: menuup } + { send: up } + ] + } + } + { + name: move_down + modifier: none + keycode: down + mode: [emacs, vi_normal, vi_insert] + event: { + until: [ + { send: menudown } + { send: down } + ] + } + } + { + name: move_left + modifier: none + keycode: left + mode: [emacs, vi_normal, vi_insert] + event: { + until: [ + { send: menuleft } + { send: left } + ] + } + } + { + name: move_right_or_take_history_hint + modifier: none + keycode: right + mode: [emacs, vi_normal, vi_insert] + event: { + until: [ + { send: historyhintcomplete } + { send: menuright } + { send: right } + ] + } + } + { + name: move_one_word_left + modifier: control + keycode: left + mode: [emacs, vi_normal, vi_insert] + event: { edit: movewordleft } + } + { + name: move_one_word_right_or_take_history_hint + modifier: control + keycode: right + mode: [emacs, vi_normal, vi_insert] + event: { + until: [ + { send: historyhintwordcomplete } + { edit: movewordright } + ] + } + } + { + name: move_to_line_start + modifier: none + keycode: home + mode: [emacs, vi_normal, vi_insert] + event: { edit: movetolinestart } + } + { + name: move_to_line_start + modifier: control + keycode: char_a + mode: [emacs, vi_normal, vi_insert] + event: { edit: movetolinestart } + } + { + name: move_to_line_end_or_take_history_hint + modifier: none + keycode: end + mode: [emacs, vi_normal, vi_insert] + event: { + until: [ + { send: historyhintcomplete } + { edit: movetolineend } + ] + } + } + { + name: move_to_line_end_or_take_history_hint + modifier: control + keycode: char_e + mode: [emacs, vi_normal, vi_insert] + event: { + until: [ + { send: historyhintcomplete } + { edit: movetolineend } + ] + } + } + { + name: move_to_line_start + modifier: control + keycode: home + mode: [emacs, vi_normal, vi_insert] + event: { edit: movetolinestart } + } + { + name: move_to_line_end + modifier: control + keycode: end + mode: [emacs, vi_normal, vi_insert] + event: { edit: movetolineend } + } + { + name: move_up + modifier: control + keycode: char_p + mode: [emacs, vi_normal, vi_insert] + event: { + until: [ + { send: menuup } + { send: up } + ] + } + } + { + name: move_down + modifier: control + keycode: char_t + mode: [emacs, vi_normal, vi_insert] + event: { + until: [ + { send: menudown } + { send: down } + ] + } + } + { + name: delete_one_character_backward + modifier: none + keycode: backspace + mode: [emacs, vi_insert] + event: { edit: backspace } + } + { + name: delete_one_word_backward + modifier: control + keycode: backspace + mode: [emacs, vi_insert] + event: { edit: backspaceword } + } + { + name: delete_one_character_forward + modifier: none + keycode: delete + mode: [emacs, vi_insert] + event: { edit: delete } + } + { + name: delete_one_character_forward + modifier: control + keycode: delete + mode: [emacs, vi_insert] + event: { edit: delete } + } + { + name: delete_one_character_backward + modifier: control + keycode: char_h + mode: [emacs, vi_insert] + event: { edit: backspace } + } + { + name: delete_one_word_backward + modifier: control + keycode: char_w + mode: [emacs, vi_insert] + event: { edit: backspaceword } + } + { + name: move_left + modifier: none + keycode: backspace + mode: vi_normal + event: { edit: moveleft } + } + { + name: newline_or_run_command + modifier: none + keycode: enter + mode: emacs + event: { send: enter } + } + { + name: move_left + modifier: control + keycode: char_b + mode: emacs + event: { + until: [ + { send: menuleft } + { send: left } + ] + } + } + { + name: move_right_or_take_history_hint + modifier: control + keycode: char_f + mode: emacs + event: { + until: [ + { send: historyhintcomplete } + { send: menuright } + { send: right } + ] + } + } + { + name: redo_change + modifier: control + keycode: char_g + mode: emacs + event: { edit: redo } + } + { + name: undo_change + modifier: control + keycode: char_z + mode: emacs + event: { edit: undo } + } + { + name: paste_before + modifier: control + keycode: char_y + mode: emacs + event: { edit: pastecutbufferbefore } + } + { + name: cut_word_left + modifier: control + keycode: char_w + mode: emacs + event: { edit: cutwordleft } + } + { + name: cut_line_to_end + modifier: control + keycode: char_k + mode: emacs + event: { edit: cuttoend } + } + { + name: cut_line_from_start + modifier: control + keycode: char_u + mode: emacs + event: { edit: cutfromstart } + } + { + name: swap_graphemes + modifier: control + keycode: char_t + mode: emacs + event: { edit: swapgraphemes } + } + { + name: move_one_word_left + modifier: alt + keycode: left + mode: emacs + event: { edit: movewordleft } + } + { + name: move_one_word_right_or_take_history_hint + modifier: alt + keycode: right + mode: emacs + event: { + until: [ + { send: historyhintwordcomplete } + { edit: movewordright } + ] + } + } + { + name: move_one_word_left + modifier: alt + keycode: char_b + mode: emacs + event: { edit: movewordleft } + } + { + name: move_one_word_right_or_take_history_hint + modifier: alt + keycode: char_f + mode: emacs + event: { + until: [ + { send: historyhintwordcomplete } + { edit: movewordright } + ] + } + } + { + name: delete_one_word_forward + modifier: alt + keycode: delete + mode: emacs + event: { edit: deleteword } + } + { + name: delete_one_word_backward + modifier: alt + keycode: backspace + mode: emacs + event: { edit: backspaceword } + } + { + name: delete_one_word_backward + modifier: alt + keycode: char_m + mode: emacs + event: { edit: backspaceword } + } + { + name: cut_word_to_right + modifier: alt + keycode: char_d + mode: emacs + event: { edit: cutwordright } + } + { + name: upper_case_word + modifier: alt + keycode: char_u + mode: emacs + event: { edit: uppercaseword } + } + { + name: lower_case_word + modifier: alt + keycode: char_l + mode: emacs + event: { edit: lowercaseword } + } + { + name: capitalize_char + modifier: alt + keycode: char_c + mode: emacs + event: { edit: capitalizechar } + } + # The following bindings with `*system` events require that Nushell has + # been compiled with the `system-clipboard` feature. + # This should be the case for Windows, macOS, and most Linux distributions + # Not available for example on Android (termux) + # If you want to use the system clipboard for visual selection or to + # paste directly, uncomment the respective lines and replace the version + # using the internal clipboard. + { + name: copy_selection + modifier: control_shift + keycode: char_c + mode: emacs + event: { edit: copyselection } + # event: { edit: copyselectionsystem } + } + { + name: cut_selection + modifier: control_shift + keycode: char_x + mode: emacs + event: { edit: cutselection } + # event: { edit: cutselectionsystem } + } + # { + # name: paste_system + # modifier: control_shift + # keycode: char_v + # mode: emacs + # event: { edit: pastesystem } + # } + { + name: select_all + modifier: control_shift + keycode: char_a + mode: emacs + event: { edit: selectall } + } + ] +} diff --git a/picom.conf b/picom.conf new file mode 100644 index 0000000..639474e --- /dev/null +++ b/picom.conf @@ -0,0 +1,17 @@ +backend = "glx"; + +corner-radius = 5.0; +shadow = true; +shadow-radius = 10; + +blur: +{ + method = "dual_kawase"; +} + +blur-background-exclude = [ + "window_type = 'dock'", + "class_g ~= 'slop'", +]; + +vsync = true; diff --git a/rofi/config.rasi b/rofi/config.rasi new file mode 100644 index 0000000..70e41fc --- /dev/null +++ b/rofi/config.rasi @@ -0,0 +1,14 @@ +configuration { + font: "DaddyTimeMono Nerd Font 14"; + show-icons: true; + sort: true; + sorting-method: "fzf"; + timeout { + action: "kb-cancel"; + delay: 0; + } + filebrowser { + directories-first: true; + sorting-method: "name"; + } +} diff --git a/xinitrc b/xinitrc new file mode 100644 index 0000000..fcd424f --- /dev/null +++ b/xinitrc @@ -0,0 +1 @@ +exec leftwm