diff --git a/flake.lock b/flake.lock index 193ed7e..75d9a57 100644 --- a/flake.lock +++ b/flake.lock @@ -37,6 +37,27 @@ "type": "github" } }, + "dgop": { + "inputs": { + "nixpkgs": [ + "dms", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1762835999, + "narHash": "sha256-UykYGrGFOFTmDpKTLNxj1wvd1gbDG4TkqLNSbV0TYwk=", + "owner": "AvengeMedia", + "repo": "dgop", + "rev": "799301991cd5dcea9b64245f9d500dcc76615653", + "type": "github" + }, + "original": { + "owner": "AvengeMedia", + "repo": "dgop", + "type": "github" + } + }, "disko": { "inputs": { "nixpkgs": [ @@ -57,6 +78,29 @@ "type": "github" } }, + "dms": { + "inputs": { + "dgop": "dgop", + "nixpkgs": [ + "nixpkgs" + ], + "quickshell": "quickshell" + }, + "locked": { + "lastModified": 1765552734, + "narHash": "sha256-rWjWYu5rs3ZOJ4YJpvIscBZSYu74thJHc0VYyYKJTUc=", + "owner": "AvengeMedia", + "repo": "DankMaterialShell", + "rev": "7fb358bada0d3a229ec5ee6aaad0f9b64f367331", + "type": "github" + }, + "original": { + "owner": "AvengeMedia", + "ref": "stable", + "repo": "DankMaterialShell", + "type": "github" + } + }, "flake-compat": { "flake": false, "locked": { @@ -501,11 +545,34 @@ "type": "github" } }, + "quickshell": { + "inputs": { + "nixpkgs": [ + "dms", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1764663772, + "narHash": "sha256-sHqLmm0wAt3PC4vczJeBozI1/f4rv9yp3IjkClHDXDs=", + "ref": "refs/heads/master", + "rev": "26531fc46ef17e9365b03770edd3fb9206fcb460", + "revCount": 713, + "type": "git", + "url": "https://git.outfoxxed.me/quickshell/quickshell" + }, + "original": { + "rev": "26531fc46ef17e9365b03770edd3fb9206fcb460", + "type": "git", + "url": "https://git.outfoxxed.me/quickshell/quickshell" + } + }, "root": { "inputs": { "actualbudget-report": "actualbudget-report", "deferred-apps": "deferred-apps", "disko": "disko", + "dms": "dms", "hardware": "hardware", "home-manager": "home-manager", "iamb-flake": "iamb-flake", diff --git a/home/crow/Incarceron.nix b/home/crow/Incarceron.nix index 8918096..07a7300 100644 --- a/home/crow/Incarceron.nix +++ b/home/crow/Incarceron.nix @@ -3,7 +3,7 @@ imports = [ common/core common/optional/desktops/sway - common/optional/browsers/firefox.nix + common/optional/browsers common/optional/comms common/optional/media common/optional/gaming diff --git a/home/crow/Parzival.nix b/home/crow/Parzival.nix index 47e2ffc..83887a1 100644 --- a/home/crow/Parzival.nix +++ b/home/crow/Parzival.nix @@ -3,7 +3,7 @@ imports = [ common/core common/optional/desktops/sway - common/optional/browsers/firefox.nix + common/optional/browsers common/optional/comms common/optional/media common/optional/gaming diff --git a/home/crow/common/core/default.nix b/home/crow/common/core/default.nix index 78e9b83..76a5c27 100644 --- a/home/crow/common/core/default.nix +++ b/home/crow/common/core/default.nix @@ -23,6 +23,7 @@ in ./git.nix ./nushell.nix ./starship.nix + ./terminal.nix ]; programs.deferredApps = { diff --git a/home/crow/common/core/terminal.nix b/home/crow/common/core/terminal.nix new file mode 100644 index 0000000..d81bea5 --- /dev/null +++ b/home/crow/common/core/terminal.nix @@ -0,0 +1,10 @@ +{ + programs.foot = { + enable = true; + settings = { + main = { + include = "/home/crow/.config/foot/dank-colors.ini"; + }; + }; + }; +} diff --git a/home/crow/common/optional/browsers/chrome.nix b/home/crow/common/optional/browsers/chrome.nix deleted file mode 100644 index c36e889..0000000 --- a/home/crow/common/optional/browsers/chrome.nix +++ /dev/null @@ -1,6 +0,0 @@ -{pkgs, ...}: { - programs.chromium = { - enable = true; - package = pkgs.ungoogled-chromium; - }; -} diff --git a/home/crow/common/optional/browsers/firefox.nix b/home/crow/common/optional/browsers/default.nix similarity index 67% rename from home/crow/common/optional/browsers/firefox.nix rename to home/crow/common/optional/browsers/default.nix index 069578f..661ecfc 100644 --- a/home/crow/common/optional/browsers/firefox.nix +++ b/home/crow/common/optional/browsers/default.nix @@ -22,6 +22,7 @@ }; OfferToSaveLogins = false; PasswordManagerEnabled = false; + # You can find extension settings by installing the extension in firefox and then going to about:debugging#/runtime/this-firefox to get the extension ID ExtensionSettings = { # Bitwarden "{446900e4-71c2-419f-a6a7-df9c091e268b}" = { @@ -51,9 +52,9 @@ install_url = "https://addons.mozilla.org/firefox/downloads/latest/sponsorBlocker@ajay.app/latest.xpl"; default_area = "menupanel"; }; - "extension@tabliss.io" = { + "pywalfox@frewacom.org" = { installation_mode = "force_installed"; - install_url = "https://addons.mozilla.org/firefox/downloads/latest/extension@tabliss.io/latest.xpl"; + install_url = "https://addons.mozilla.org/firefox/downloads/latest/ pywalfox@frewacom.org/latest.xpl"; default_area = "menupanel"; }; }; @@ -62,14 +63,21 @@ home.packages = builtins.attrValues { inherit (pkgs) - mullvad-browser + pywalfox-native ; }; - home.file.".librewolf/custom/tabliss.json" = { + systemd.user.tmpfiles.rules = [ + "L+ /home/crow/.cache/wal/dank-pywalfox.json - - - - /home/crow/.cache/wal/colors.json" + ]; + + programs.deferredApps = { enable = true; - text = '' - {"data/default-unsplash":{"by":"official","collections":"","featured":false,"paused":false,"search":"tech","topics":"qPYsDzvJOYc","timeout":900},"widget/default-greeting":null,"data/default-time":{"mode":"digital","hour12":false,"showDate":true,"showMinutes":true,"showSeconds":true,"showDayPeriod":true,"timeZone":null},"data/74u_bPXyI_VQ":{"category":"developerexcuses"},"widget/V0OGit2zzORD":null,"widget/default-time":{"id":"default-time","key":"widget/time","order":0,"display":{"position":"middleCentre"}},"widget/74u_bPXyI_VQ":{"id":"74u_bPXyI_VQ","key":"widget/quote","order":2,"display":{"position":"middleCentre"}},"focus":false,"widget/h51N3y5Q5Y5e":{"id":"h51N3y5Q5Y5e","key":"widget/workHours","order":3,"display":{"position":"middleCentre"}},"widget/05GPTS-DklPw":null,"background":{"id":"default-unsplash","key":"background/unsplash","display":{"luminosity":-0.2,"blur":0}},"locale":"en","timeZone":null,"version":3} - ''; + packages = builtins.attrValues { + inherit (pkgs) + mullvad-browser + ungoogled-chromium + ; + }; }; } diff --git a/home/crow/common/optional/desktops/sway/default.nix b/home/crow/common/optional/desktops/sway/default.nix index 6cf8291..ea145bd 100644 --- a/home/crow/common/optional/desktops/sway/default.nix +++ b/home/crow/common/optional/desktops/sway/default.nix @@ -1,4 +1,5 @@ { + inputs, lib, config, pkgs, @@ -11,7 +12,7 @@ let if m.enabled then lib.strings.concatStringsSep "\n" [ "output ${m.name} mode ${toString m.width}x${toString m.height}@${toString m.refreshRate}Hz pos ${toString m.x} ${toString m.y} transform ${toString m.transform}" - "exec swww img -o ${m.name} ${m.background}" + "exec dms ipc call wallpaper setFor ${m.name} ${m.background}" ] else "output ${m.name} disable" @@ -19,31 +20,19 @@ let config.monitors; in { + imports = [ - ./waybar.nix - ../swww + ../dank ]; home.packages = with pkgs; [ foot - wofi - swaynotificationcenter polkit_gnome swayidle sway-audio-idle-inhibit swaylock-effects - sway-contrib.grimshot - waybar - wl-clipboard hyprlock - grim - slurp - swappy wljoywake - pulseaudio - playerctl - brightnessctl - pavucontrol ]; wayland.windowManager.sway = { diff --git a/home/crow/common/optional/desktops/sway/sway.conf b/home/crow/common/optional/desktops/sway/sway.conf index 20091fa..e5a7835 100644 --- a/home/crow/common/optional/desktops/sway/sway.conf +++ b/home/crow/common/optional/desktops/sway/sway.conf @@ -1,90 +1,27 @@ -# Assign specific workspaces to specific outputs +########### +# General # +########### + +set $mod Mod4 +set $term foot + +exec /usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1 # FIXME: Look at dank polkit + +####### +# DMS # +####### + +exec dms run +exec wl-paste --watch cliphist store + +############## +# Workspaces # +############## workspace 1 output HDMI-A-1 # Firefox workspace 2 output HDMI-A-1 # Comms workspace 3 output DP-1 # Terminal workspace 5 output DP-1 # Mudlet -# Assign wacom tablet to primary monitor -input type:tablet_tool map_to_output DP-1 -input type:tablet_tool map_to_output eDP-1 - -set $mod Mod4 -########################### -### Systemd Integration ### -########################### - -exec systemctl --user import-environment XDG_SESSION_TYPE XDG_CURRENT_DESKTOP WAYLAND_DISPLAY -exec dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP=sway - - -################### -### MY PROGRAMS ### -################### - -set $term foot -set $menu wofi --show run | xargs swaymsg exec -- - -exec waybar -exec swaync -exec udiskie -exec /usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1 - -################### -### IDLE CONFIG ### -################### - -exec swayidle -w timeout 300 'hyprlock' -exec wljoywake # prevent screen sleep on joystick input - -set $lock 'hyprlock' -bindswitch --reload --locked lid:on exec $lock -for_window [app_id="firefox"] inhibit_idle fullscreen -bindsym $mod+Shift+z exec $lock - -### Input configuration -# -# Example configuration: -# -# input "2:14:SynPS/2_Synaptics_TouchPad" { -# dwt enabled -# tap enabled -# natural_scroll enabled -# middle_emulation enabled -# } -# -# You can get the names of your inputs by running: swaymsg -t get_inputs -# Read `man 5 sway-input` for more information about this section. - -################### -### KEYBINDINGS ### -################### - -bindsym $mod+Return exec $term -bindsym $mod+Shift+q kill -bindsym $mod+Shift+e exec swaynag -t warning -m 'You pressed the exit shortcut. Do you really want to exit sway? This will end your Wayland session.' -B 'Yes, exit sway' 'swaymsg exit' -bindsym $mod+Shift+n exec networkmanager_dmenu -bindsym $mod+n exec swaync-client -t -sw -bindsym $mod+d exec $menu -bindsym $mod+Shift+d exec UDISKIE_DMENU_LAUNCHER="wofi" udiskie-dmenu -matching regex -dmenu -i -no-custom -multi-select -# Reload the configuration file -bindsym $mod+Shift+c reload - -floating_modifier $mod normal - -bindsym $mod+Left focus left -bindsym $mod+Down focus down -bindsym $mod+Up focus up -bindsym $mod+Right focus right - -bindsym $mod+Shift+Left move left -bindsym $mod+Shift+Down move down -bindsym $mod+Shift+Up move up -bindsym $mod+Shift+Right move right - -################## -### WORKSPACES ### -################## - bindsym $mod+1 workspace number 1 bindsym $mod+2 workspace number 2 bindsym $mod+3 workspace number 3 @@ -106,46 +43,71 @@ bindsym $mod+Shift+7 move container to workspace number 7 bindsym $mod+Shift+8 move container to workspace number 8 bindsym $mod+Shift+9 move container to workspace number 9 bindsym $mod+Shift+0 move container to workspace number 10 -# -# Layout stuff: -# - # You can "split" the current object of your focus with - # $mod+b or $mod+v, for horizontal and vertical splits - # respectively. - bindsym $mod+b splith - bindsym $mod+v splitv - # Switch the current container between different layout styles - bindsym $mod+s layout stacking - bindsym $mod+w layout tabbed - bindsym $mod+e layout toggle split +# Assign wacom tablet to primary monitor +input type:tablet_tool map_to_output DP-1 +input type:tablet_tool map_to_output eDP-1 - # Make the current focus fullscreen - bindsym $mod+f fullscreen - # Toggle the current focus between tiling and floating mode - bindsym $mod+Shift+space floating toggle +####################### +# Systemd Integration # +####################### - # Swap focus between the tiling area and the floating area - bindsym $mod+space focus mode_toggle +exec systemctl --user import-environment XDG_SESSION_TYPE XDG_CURRENT_DESKTOP WAYLAND_DISPLAY +exec dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP=sway - # Move focus to the parent container - bindsym $mod+a focus parent -# -# Scratchpad: -# - # Sway has a "scratchpad", which is a bag of holding for windows. - # You can send windows there and get them back later. - # Move the currently focused window to the scratchpad - bindsym $mod+Shift+minus move scratchpad +############### +# IDLE CONFIG # # FIXME: Switch to DankGreeter +############### + +exec swayidle -w timeout 300 'hyprlock' +exec wljoywake # prevent screen sleep on joystick input + +set $lock 'hyprlock' +bindswitch --reload --locked lid:on exec $lock +for_window [app_id="firefox"] inhibit_idle fullscreen +bindsym $mod+Shift+z exec $lock + +############### +# KEYBINDINGS # +############### + +bindsym $mod+Return exec $term +bindsym $mod+Shift+q kill +bindsym $mod+Shift+e exec swaynag -t warning -m 'You pressed the exit shortcut. Do you really want to exit sway? This will end your Wayland session.' -B 'Yes, exit sway' 'swaymsg exit' +bindsym $mod+Shift+n exec networkmanager_dmenu +bindsym $mod+d exec dms ipc call spotlight toggle +bindsym $mod+Shift+c reload # Reload config + +floating_modifier $mod normal + +bindsym $mod+Left focus left +bindsym $mod+Down focus down +bindsym $mod+Up focus up +bindsym $mod+Right focus right + +bindsym $mod+Shift+Left move left +bindsym $mod+Shift+Down move down +bindsym $mod+Shift+Up move up +bindsym $mod+Shift+Right move right + +########## +# Layout # +########## + +bindsym $mod+b splith +bindsym $mod+v splitv +bindsym $mod+s layout stacking +bindsym $mod+w layout tabbed +bindsym $mod+e layout toggle split +bindsym $mod+f fullscreen +bindsym $mod+Shift+space floating toggle +bindsym $mod+space focus mode_toggle +bindsym $mod+a focus parent +bindsym $mod+Shift+minus move scratchpad +bindsym $mod+minus scratchpad show - # Show the next scratchpad window or hide the focused scratchpad window. - # If there are multiple scratchpad windows, this command cycles through them. - bindsym $mod+minus scratchpad show -# -# Resizing containers: -# mode "resize" { bindsym Left resize shrink width 10px bindsym Down resize grow height 10px @@ -158,14 +120,16 @@ mode "resize" { } bindsym $mod+r mode "resize" -# Media controls: -bindsym XF86AudioRaiseVolume exec pactl set-sink-volume @DEFAULT_SINK@ +5% -bindsym XF86AudioLowerVolume exec pactl set-sink-volume @DEFAULT_SINK@ -5% -bindsym XF86AudioMute exec pactl set-sink-mute @DEFAULT_SINK@ toggle -bindsym XF86AudioMicMute exec pulseaudio-ctl mute-input -bindsym XF86AudioPlay exec playerctl play-pause -bindsym XF86AudioNext exec playerctl next -bindsym XF86AudioPrev exec playerctl previous -bindsym XF86MonBrightnessUp exec brightnessctl s +5% -bindsym XF86MonBrightnessDown exec brightnessctl s 5%- -bindsym Print exec grim -g "$(slurp)" - | swappy -f - +################## +# Media controls # +################## +bindsym XF86AudioRaiseVolume exec dms ipc call audio increment 5 +bindsym XF86AudioLowerVolume exec dms ipc call audio decrement 5 +bindsym XF86AudioMute exec dms ipc call audio mute +bindsym XF86AudioMicMute exec dms ipc call audio micmute +bindsym XF86AudioPlay exec dms ipc call mpris playPause +bindsym XF86AudioNext exec dms ipc call mpris next +bindsym XF86AudioPrev exec dms ipc call mpris previous +bindsym XF86MonBrightnessUp exec dms ipc call brightness increment 5 "" +bindsym XF86MonBrightnessDown exec dms ipc call brightness decrement 5 "" +bindsym Print exec dms screenshot diff --git a/home/crow/common/optional/desktops/sway/waybar.nix b/home/crow/common/optional/desktops/sway/waybar.nix deleted file mode 100644 index 8025fea..0000000 --- a/home/crow/common/optional/desktops/sway/waybar.nix +++ /dev/null @@ -1,230 +0,0 @@ -{osConfig, ...}: let - # screenshots/og_waybar.jpg - og_waybar = { - jsonc = { - mainBar = { - layer = "top"; - position = "top"; - height = 30; - spacing = 4; - mode = "dock"; - margin = "10"; - modules-left = ["sway/workspaces"]; - modules-center = ["clock"]; - modules-right = ["network" "battery" "backlight" "pulseaudio" "tray"]; - tray = { - spacing = 10; - }; - "sway/workspaces" = { - format = "{icon}"; - format-icons = { - "1" = "󰈹"; - "2" = ""; - "3" = ""; - "4" = "󰎆"; - "5" = "󰓥"; - "urgent" = ""; - "active" = ""; - "default" = ""; - }; - sort-by-number = true; - persistent-workspaces = { - "1" = ["HDMI-A-1"]; - "2" = ["HDMI-A-1"]; - "3" = ["DP-1"]; - "4" = ["HDMI-A-1"]; - }; - }; - clock = { - tooltip-format = "{:%Y %B}\n{calendar}"; - format-alt = "{:%m-%d-%Y}"; - }; - network = { - format-wifi = "{essid} ({signalStrength}%) "; - format-ethernet = "{ipaddr}/{cidr} "; - tooltip-format = "{ifname} via {gwaddr} "; - format-linked = "{ifname} (No IP) "; - format-disconnected = "Disconnected ⚠"; - format-alt = "{ifname}: {ipaddr}/{cidr}"; - }; - battery = { - states = { - warning = 30; - critical = 15; - }; - format = "{capacity}% {icon}"; - format-full = "{capacity}% {icon}"; - format-charging = "{capacity}% "; - format-plugged = "{capacity}% "; - format-alt = "{time} {icon}"; - format-icons = ["" "" "" "" ""]; - interval = 30; - }; - backlight = { - format = "{percent}% {icon}"; - format-icons = ["󰃞" "󰃟" "󰃠"]; - }; - pulseaudio = { - format = "{volume}% {icon} {format_source}"; - format-bluetooth = "{volume}% {icon} {format_source}"; - format-bluetooth-muted = " {icon} {format_source}"; - format-muted = " {format_source}"; - format-source = "{volume}% "; - format-source-muted = ""; - format-icons = { - headphone = ""; - hands-free = ""; - headset = ""; - phone = ""; - portable = ""; - car = ""; - default = ["" "" ""]; - }; - on-click = "pavucontrol"; - }; - }; - }; - style = '' - @define-color fg #AAB775; - @define-color bg #060617; - @define-color disabled #a5a5a5; - @define-color alert #f53c3c; - @define-color activegreen #8fb666; - - * { - min-height: 0; - font-family: "JetBrainsMono Nerd Font", "Hack Nerd Font", "Font Awesome 6 Free Regular", "Font Awesome 6 Free Solid", "Font Awesome 6 Brands"; - font-size: 14px; - } - - window#waybar { - color: @fg; - background: @bg; - transition-property: background-color; - border-radius: 25px; - transition-duration: 0.5s; - - } - - window#waybar.empty { - opacity: 0.3; - } - - button { - /* Use box-shadow instead of border so the text isn't offset */ - box-shadow: inset 0 -3px transparent; - /* Avoid rounded borders under each button name */ - border: none; - border-radius: 0; - } - - /* https://github.com/Alexays/Waybar/wiki/FAQ#the-workspace-buttons-have-a-strange-hover-effect */ - button:hover { - background: inherit; - box-shadow: inset 0 -3px transparent; - } - - #workspaces button { - color: @fg; - /* padding : 0px 5px; */ - } - - #workspaces button.urgent { - color: @alert; - } - #workspaces button.empty { - color: @disabled; - } - - #workspaces button.active { - border-bottom: 2px solid #DCAA9B; - border-radius: 0; - margin-top: 2px; - color: #DCAA9B; - transition: none; - } - - /* If workspaces is the leftmost module, omit left margin */ - .modules-left > widget:first-child > #workspaces { - margin-left: 0; - } - - /* If workspaces is the rightmost module, omit right margin */ - .modules-right > widget:last-child > #workspaces { - margin-right: 0; - } - - #clock, - #battery, - #cpu, - #memory, - #disk, - #temperature, - #language, - #backlight, - #backlight-slider, - #network, - #pulseaudio, - #wireplumber, - #custom-media, - #taskbar, - #tray, - #tray menu, - #tray > .needs-attention, - #tray > .passive, - #tray > .active, - #mode, - #idle_inhibitor, - #scratchpad, - #custom-power, - #window, - #mpd { - padding: 0px 5px; - padding-right: 10px; - margin: 3px 3px; - color: @fg; - } - - #custom-power { - color: @fg; - padding-left: 10px; - } - - #custom-separator { - color: @disabled; - } - - #network.disconnected, - #pulseaudio.muted, - #wireplumber.muted { - color: @alert; - } - - #battery.charging, - #battery.plugged { - color: #26a65b; - } - - label:focus { - background-color: #333333; - } - - #battery.critical:not(.charging) { - background-color: @alert; - color: @fg; - animation-name: blink; - animation-duration: 0.5s; - animation-timing-function: linear; - animation-iteration-count: infinite; - animation-direction: alternate; - } - - ''; - }; -in { - programs.waybar = { - enable = true; - settings = og_waybar.jsonc; - style = og_waybar.style; - }; -}