diff --git a/defaults/nvim/lua/plugins/discord.lua b/defaults/nvim/lua/plugins/discord.lua new file mode 100644 index 0000000..3a99b3a --- /dev/null +++ b/defaults/nvim/lua/plugins/discord.lua @@ -0,0 +1,5 @@ +return { + { + 'andweeb/presence.nvim', + } +} diff --git a/defaults/sway/config b/defaults/sway/config index 30775df..40c4ff0 100644 --- a/defaults/sway/config +++ b/defaults/sway/config @@ -10,8 +10,7 @@ set $right l set $term alacritty # Menu (rofi) -set $rofi_cmd rofi -terminal '$term' -set $menu $rofi_cmd -show combi -combi-modes drun#run -modes combi +set $menu wofi --term '$term' ### Output configuration output DP-3 pos 3840 0 res 1920x1080@59Hz @@ -28,13 +27,17 @@ output DP-3 bg ~/.wallpaper/.wallpaper.png fill ## DP-3 bindings workspace 1 output DP-2 workspace 2 output DP-2 +workspace 4 output DP-2 +workspace 5 output DP-2 ## HDMI-A-1 bindings -workspace 3 output HDMI-A-1 +workspace 3 output HDMI-A-1 +workspace 9 output HDMI-A-1 ## DP-2 bindings workspace 6 output DP-3 workspace 7 output DP-3 +workspace 8 output DP-3 ### Colour options set $bg #24283b @@ -87,8 +90,9 @@ floating_modifier $mod normal # Reload the configuration file bindsym $mod+Shift+c reload - # Exit sway (logs you out of your Wayland session) - 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' + # Shutdown and reboot hotkeys + bindsym $mod+Shift+e exec swaynag -t warning -m 'You pressed the shutdown shortcut. Do you really want to shutdown your computer?' -b 'Yes, shutdown' 'systemctl poweroff' + bindsym $mod+Shift+r exec swaynag -t warning -m 'You pressed the reboot shortcut. Do you really want to reboot your computer?' -b 'Yes, reboot' 'systemctl reboot' ### Navigation # Move your focus around @@ -182,8 +186,9 @@ mode "resize" { bindsym Return mode "default" bindsym Escape mode "default" } -bindsym $mod+r mode "resize" +### resize +bindsym $mod+r mode "resize" ### Audio and brightness keybinds bindsym XF86AudioRaiseVolume exec pactl set-sink-volume @DEFAULT_SINK@ +5% @@ -196,16 +201,14 @@ bindsym XF86AudioPrev exec playerctl previous bindsym XF86MonBrightnessUp exec light -A 5 bindsym XF86MonBrightnessDown exec light -U 5 -### Lock the screen so my brother -### won't dick with my computer -bindsym $mod+Ctrl+l 'swaylock -f -i /home/wyatt/.wallpaper_lock.jpeg' +### Lock the screen +bindsym $mod+Ctrl+q 'swaylock -f -i /home/wyatt/.wallpaper/.wallpaper_lock.png' ### Status Bar: bar { swaybar_command waybar } - ### Font settings: font pango:FiraCode: 14px diff --git a/defaults/zellij/config.kdl b/defaults/zellij/config.kdl new file mode 100644 index 0000000..61a01bc --- /dev/null +++ b/defaults/zellij/config.kdl @@ -0,0 +1,254 @@ +keybinds clear-defaults=true { + locked { + bind "Ctrl g" { SwitchToMode "normal"; } + } + pane { + bind "left" { MoveFocus "left"; } + bind "down" { MoveFocus "down"; } + bind "up" { MoveFocus "up"; } + bind "right" { MoveFocus "right"; } + bind "c" { SwitchToMode "renamepane"; PaneNameInput 0; } + bind "d" { NewPane "down"; SwitchToMode "normal"; } + bind "e" { TogglePaneEmbedOrFloating; SwitchToMode "normal"; } + bind "f" { ToggleFocusFullscreen; SwitchToMode "normal"; } + bind "h" { MoveFocus "left"; } + bind "j" { MoveFocus "down"; } + bind "k" { MoveFocus "up"; } + bind "l" { MoveFocus "right"; } + bind "n" { NewPane; SwitchToMode "normal"; } + bind "p" { SwitchFocus; } + bind "Ctrl p" { SwitchToMode "normal"; } + bind "r" { NewPane "right"; SwitchToMode "normal"; } + bind "w" { ToggleFloatingPanes; SwitchToMode "normal"; } + bind "z" { TogglePaneFrames; SwitchToMode "normal"; } + } + tab { + bind "left" { GoToPreviousTab; } + bind "down" { GoToNextTab; } + bind "up" { GoToPreviousTab; } + bind "right" { GoToNextTab; } + bind "1" { GoToTab 1; SwitchToMode "normal"; } + bind "2" { GoToTab 2; SwitchToMode "normal"; } + bind "3" { GoToTab 3; SwitchToMode "normal"; } + bind "4" { GoToTab 4; SwitchToMode "normal"; } + bind "5" { GoToTab 5; SwitchToMode "normal"; } + bind "6" { GoToTab 6; SwitchToMode "normal"; } + bind "7" { GoToTab 7; SwitchToMode "normal"; } + bind "8" { GoToTab 8; SwitchToMode "normal"; } + bind "9" { GoToTab 9; SwitchToMode "normal"; } + bind "[" { BreakPaneLeft; SwitchToMode "normal"; } + bind "]" { BreakPaneRight; SwitchToMode "normal"; } + bind "b" { BreakPane; SwitchToMode "normal"; } + bind "h" { GoToPreviousTab; } + bind "j" { GoToNextTab; } + bind "k" { GoToPreviousTab; } + bind "l" { GoToNextTab; } + bind "n" { NewTab; SwitchToMode "normal"; } + bind "r" { SwitchToMode "renametab"; TabNameInput 0; } + bind "s" { ToggleActiveSyncTab; SwitchToMode "normal"; } + bind "Ctrl t" { SwitchToMode "normal"; } + bind "x" { CloseTab; SwitchToMode "normal"; } + bind "tab" { ToggleTab; } + } + resize { + bind "left" { Resize "Increase left"; } + bind "down" { Resize "Increase down"; } + bind "up" { Resize "Increase up"; } + bind "right" { Resize "Increase right"; } + bind "+" { Resize "Increase"; } + bind "-" { Resize "Decrease"; } + bind "=" { Resize "Increase"; } + bind "H" { Resize "Decrease left"; } + bind "J" { Resize "Decrease down"; } + bind "K" { Resize "Decrease up"; } + bind "L" { Resize "Decrease right"; } + bind "h" { Resize "Increase left"; } + bind "j" { Resize "Increase down"; } + bind "k" { Resize "Increase up"; } + bind "l" { Resize "Increase right"; } + bind "Ctrl n" { SwitchToMode "normal"; } + } + move { + bind "left" { MovePane "left"; } + bind "down" { MovePane "down"; } + bind "up" { MovePane "up"; } + bind "right" { MovePane "right"; } + bind "h" { MovePane "left"; } + bind "Ctrl h" { SwitchToMode "normal"; } + bind "j" { MovePane "down"; } + bind "k" { MovePane "up"; } + bind "l" { MovePane "right"; } + bind "n" { MovePane; } + bind "p" { MovePaneBackwards; } + bind "tab" { MovePane; } + } + scroll { + bind "Alt left" { MoveFocusOrTab "left"; SwitchToMode "normal"; } + bind "Alt down" { MoveFocus "down"; SwitchToMode "normal"; } + bind "Alt up" { MoveFocus "up"; SwitchToMode "normal"; } + bind "Alt right" { MoveFocusOrTab "right"; SwitchToMode "normal"; } + bind "e" { EditScrollback; SwitchToMode "normal"; } + bind "Alt h" { MoveFocusOrTab "left"; SwitchToMode "normal"; } + bind "Alt j" { MoveFocus "down"; SwitchToMode "normal"; } + bind "Alt k" { MoveFocus "up"; SwitchToMode "normal"; } + bind "Alt l" { MoveFocusOrTab "right"; SwitchToMode "normal"; } + bind "s" { SwitchToMode "entersearch"; SearchInput 0; } + } + search { + bind "c" { SearchToggleOption "CaseSensitivity"; } + bind "n" { Search "down"; } + bind "o" { SearchToggleOption "WholeWord"; } + bind "p" { Search "up"; } + bind "w" { SearchToggleOption "Wrap"; } + } + session { + bind "c" { + LaunchOrFocusPlugin "configuration" { + floating true + move_to_focused_tab true + } + SwitchToMode "normal" + } + bind "Ctrl o" { SwitchToMode "normal"; } + bind "p" { + LaunchOrFocusPlugin "plugin-manager" { + floating true + move_to_focused_tab true + } + SwitchToMode "normal" + } + bind "w" { + LaunchOrFocusPlugin "session-manager" { + floating true + move_to_focused_tab true + } + SwitchToMode "normal" + } + } + shared_except "locked" { + bind "Alt +" { Resize "Increase"; } + bind "Alt -" { Resize "Decrease"; } + bind "Alt =" { Resize "Increase"; } + bind "Alt [" { PreviousSwapLayout; } + bind "Alt ]" { NextSwapLayout; } + bind "Alt f" { ToggleFloatingPanes; } + bind "Ctrl g" { SwitchToMode "locked"; } + bind "Alt i" { MoveTab "left"; } + bind "Alt n" { NewPane; } + bind "Alt o" { MoveTab "right"; } + bind "Ctrl q" { Quit; } + } + shared_except "locked" "move" { + bind "Ctrl h" { SwitchToMode "move"; } + } + shared_except "locked" "session" { + bind "Ctrl o" { SwitchToMode "session"; } + } + shared_except "locked" "scroll" { + bind "Alt left" { MoveFocusOrTab "left"; } + bind "Alt down" { MoveFocus "down"; } + bind "Alt up" { MoveFocus "up"; } + bind "Alt right" { MoveFocusOrTab "right"; } + bind "Alt h" { MoveFocusOrTab "left"; } + bind "Alt j" { MoveFocus "down"; } + bind "Alt k" { MoveFocus "up"; } + bind "Alt l" { MoveFocusOrTab "right"; } + } + shared_except "locked" "scroll" "search" "tmux" { + bind "Ctrl b" { SwitchToMode "tmux"; } + } + shared_except "locked" "tab" { + bind "Ctrl t" { SwitchToMode "tab"; } + } + shared_except "locked" "pane" { + bind "Ctrl p" { SwitchToMode "pane"; } + } + shared_except "locked" "resize" { + bind "Ctrl n" { SwitchToMode "resize"; } + } + shared_except "normal" "locked" "entersearch" { + bind "enter" { SwitchToMode "normal"; } + } + shared_except "normal" "locked" "entersearch" "renametab" "renamepane" { + bind "esc" { SwitchToMode "normal"; } + } + shared_among "pane" "tmux" { + bind "x" { CloseFocus; SwitchToMode "normal"; } + } + shared_among "scroll" "search" { + bind "PageDown" { PageScrollDown; } + bind "PageUp" { PageScrollUp; } + bind "left" { PageScrollUp; } + bind "down" { ScrollDown; } + bind "up" { ScrollUp; } + bind "right" { PageScrollDown; } + bind "Ctrl b" { PageScrollUp; } + bind "Ctrl c" { ScrollToBottom; SwitchToMode "normal"; } + bind "d" { HalfPageScrollDown; } + bind "Ctrl f" { PageScrollDown; } + bind "h" { PageScrollUp; } + bind "j" { ScrollDown; } + bind "k" { ScrollUp; } + bind "l" { PageScrollDown; } + bind "u" { HalfPageScrollUp; } + } + entersearch { + bind "Ctrl c" { SwitchToMode "scroll"; } + bind "esc" { SwitchToMode "scroll"; } + bind "enter" { SwitchToMode "search"; } + } + renametab { + bind "esc" { UndoRenameTab; SwitchToMode "tab"; } + } + shared_among "renametab" "renamepane" { + bind "Ctrl c" { SwitchToMode "normal"; } + } + renamepane { + bind "esc" { UndoRenamePane; SwitchToMode "pane"; } + } + shared_among "session" "tmux" { + bind "d" { Detach; } + } + tmux { + bind "left" { MoveFocus "left"; SwitchToMode "normal"; } + bind "down" { MoveFocus "down"; SwitchToMode "normal"; } + bind "up" { MoveFocus "up"; SwitchToMode "normal"; } + bind "right" { MoveFocus "right"; SwitchToMode "normal"; } + bind "space" { NextSwapLayout; } + bind "\"" { NewPane "down"; SwitchToMode "normal"; } + bind "%" { NewPane "right"; SwitchToMode "normal"; } + bind "," { SwitchToMode "renametab"; } + bind "[" { SwitchToMode "scroll"; } + bind "Ctrl b" { Write 2; SwitchToMode "normal"; } + bind "c" { NewTab; SwitchToMode "normal"; } + bind "h" { MoveFocus "left"; SwitchToMode "normal"; } + bind "j" { MoveFocus "down"; SwitchToMode "normal"; } + bind "k" { MoveFocus "up"; SwitchToMode "normal"; } + bind "l" { MoveFocus "right"; SwitchToMode "normal"; } + bind "n" { GoToNextTab; SwitchToMode "normal"; } + bind "o" { FocusNextPane; } + bind "p" { GoToPreviousTab; SwitchToMode "normal"; } + bind "z" { ToggleFocusFullscreen; SwitchToMode "normal"; } + } +} + +plugins { + compact-bar location="zellij:compact-bar" + configuration location="zellij:configuration" + filepicker location="zellij:strider" { + cwd "/" + } + plugin-manager location="zellij:plugin-manager" + session-manager location="zellij:session-manager" + status-bar location="zellij:status-bar" + strider location="zellij:strider" + tab-bar location="zellij:tab-bar" +} + +load_plugins { +} + +theme "catppuccin-mocha" +show_startup_tips false +show_release_notes false +default_mode "normal" diff --git a/flake.lock b/flake.lock index 316ce5a..e482aa1 100644 --- a/flake.lock +++ b/flake.lock @@ -7,11 +7,11 @@ ] }, "locked": { - "lastModified": 1748044287, - "narHash": "sha256-9bJzyUX5+HXYmI60WMGYXXDdhGbSh1Le6yBM4og3K7E=", + "lastModified": 1757432263, + "narHash": "sha256-qHn+/0+IOz5cG68BZUwL9BV3EO/e9eNKCjH3+N7wMdI=", "owner": "lnl7", "repo": "nix-darwin", - "rev": "2456ff5c95edfc3b197cb012b947012faed77591", + "rev": "1fef4404de4d1596aa5ab2bd68078370e1b9dcdb", "type": "github" }, "original": { @@ -24,11 +24,11 @@ "flake-compat": { "flake": false, "locked": { - "lastModified": 1733328505, - "narHash": "sha256-NeCCThCEP3eCl2l/+27kNNK7QrwZB1IJCrXfrbv5oqU=", + "lastModified": 1747046372, + "narHash": "sha256-CIVLLkVgvHYbgI2UpXvIIBJ12HWgX+fjA8Xf8PUmqCY=", "owner": "edolstra", "repo": "flake-compat", - "rev": "ff81ac966bb2cae68946d5ed5fc4994f96d0ffec", + "rev": "9100a0f413b0c601e0533d1d94ffd501ce2e7885", "type": "github" }, "original": { @@ -59,17 +59,16 @@ "inputs": { "flake-compat": "flake-compat", "flake-utils": "flake-utils", - "nixpkgs-stable": "nixpkgs-stable", - "nixpkgs-unstable": "nixpkgs-unstable", + "nixpkgs": "nixpkgs", "zig": "zig", "zon2nix": "zon2nix" }, "locked": { - "lastModified": 1748207486, - "narHash": "sha256-4kR7VyauWpNMrBePHMM8yzQvUzHHGRVkQpJ3DyoKcH0=", + "lastModified": 1759330332, + "narHash": "sha256-ZKyOgOOm9Itjbc5xi89xMtw+cnnOFfl79zndPMTzKpU=", "owner": "ghostty-org", "repo": "ghostty", - "rev": "3f6c02b49e08aed51e4be85d87b79b9dbea34a85", + "rev": "a5aff0e347b0016e2735d4ec4b4cdca96b5438d1", "type": "github" }, "original": { @@ -85,11 +84,11 @@ ] }, "locked": { - "lastModified": 1747556831, - "narHash": "sha256-Qb84nbYFFk0DzFeqVoHltS2RodAYY5/HZQKE8WnBDsc=", + "lastModified": 1758463745, + "narHash": "sha256-uhzsV0Q0I9j2y/rfweWeGif5AWe0MGrgZ/3TjpDYdGA=", "owner": "nix-community", "repo": "home-manager", - "rev": "d0bbd221482c2713cccb80220f3c9d16a6e20a33", + "rev": "3b955f5f0a942f9f60cdc9cacb7844335d0f21c3", "type": "github" }, "original": { @@ -117,11 +116,37 @@ }, "nixpkgs": { "locked": { - "lastModified": 1747953325, - "narHash": "sha256-y2ZtlIlNTuVJUZCqzZAhIw5rrKP4DOSklev6c8PyCkQ=", + "lastModified": 1748189127, + "narHash": "sha256-zRDR+EbbeObu4V2X5QCd2Bk5eltfDlCr5yvhBwUT6pY=", + "rev": "7c43f080a7f28b2774f3b3f43234ca11661bf334", + "type": "tarball", + "url": "https://releases.nixos.org/nixos/25.05/nixos-25.05.802491.7c43f080a7f2/nixexprs.tar.xz" + }, + "original": { + "type": "tarball", + "url": "https://channels.nixos.org/nixos-25.05/nixexprs.tar.xz" + } + }, + "nixpkgs_2": { + "locked": { + "lastModified": 1758360447, + "narHash": "sha256-XDY3A83bclygHDtesRoaRTafUd80Q30D/Daf9KSG6bs=", + "rev": "8eaee110344796db060382e15d3af0a9fc396e0e", + "type": "tarball", + "url": "https://releases.nixos.org/nixos/unstable/nixos-25.11pre864002.8eaee1103447/nixexprs.tar.xz" + }, + "original": { + "type": "tarball", + "url": "https://channels.nixos.org/nixos-unstable/nixexprs.tar.xz" + } + }, + "nixpkgs_3": { + "locked": { + "lastModified": 1759281824, + "narHash": "sha256-FIBE1qXv9TKvSNwst6FumyHwCRH3BlWDpfsnqRDCll0=", "owner": "nixos", "repo": "nixpkgs", - "rev": "55d1f923c480dadce40f5231feb472e81b0bab48", + "rev": "5b5be50345d4113d04ba58c444348849f5585b4a", "type": "github" }, "original": { @@ -131,45 +156,13 @@ "type": "github" } }, - "nixpkgs-stable": { - "locked": { - "lastModified": 1741992157, - "narHash": "sha256-nlIfTsTrMSksEJc1f7YexXiPVuzD1gOfeN1ggwZyUoc=", - "owner": "nixos", - "repo": "nixpkgs", - "rev": "da4b122f63095ca1199bd4d526f9e26426697689", - "type": "github" - }, - "original": { - "owner": "nixos", - "ref": "release-24.11", - "repo": "nixpkgs", - "type": "github" - } - }, - "nixpkgs-unstable": { - "locked": { - "lastModified": 1741865919, - "narHash": "sha256-4thdbnP6dlbdq+qZWTsm4ffAwoS8Tiq1YResB+RP6WE=", - "owner": "nixos", - "repo": "nixpkgs", - "rev": "573c650e8a14b2faa0041645ab18aed7e60f0c9a", - "type": "github" - }, - "original": { - "owner": "nixos", - "ref": "nixpkgs-unstable", - "repo": "nixpkgs", - "type": "github" - } - }, "root": { "inputs": { "darwin": "darwin", "ghostty": "ghostty", "home-manager": "home-manager", "nix-flatpak": "nix-flatpak", - "nixpkgs": "nixpkgs" + "nixpkgs": "nixpkgs_3" } }, "systems": { @@ -190,7 +183,8 @@ "zig": { "inputs": { "flake-compat": [ - "ghostty" + "ghostty", + "flake-compat" ], "flake-utils": [ "ghostty", @@ -198,15 +192,15 @@ ], "nixpkgs": [ "ghostty", - "nixpkgs-stable" + "nixpkgs" ] }, "locked": { - "lastModified": 1741825901, - "narHash": "sha256-aeopo+aXg5I2IksOPFN79usw7AeimH1+tjfuMzJHFdk=", + "lastModified": 1748261582, + "narHash": "sha256-3i0IL3s18hdDlbsf0/E+5kyPRkZwGPbSFngq5eToiAA=", "owner": "mitchellh", "repo": "zig-overlay", - "rev": "0b14285e283f5a747f372fb2931835dd937c4383", + "rev": "aafb1b093fb838f7a02613b719e85ec912914221", "type": "github" }, "original": { @@ -217,27 +211,20 @@ }, "zon2nix": { "inputs": { - "flake-utils": [ - "ghostty", - "flake-utils" - ], - "nixpkgs": [ - "ghostty", - "nixpkgs-unstable" - ] + "nixpkgs": "nixpkgs_2" }, "locked": { - "lastModified": 1742104771, - "narHash": "sha256-LhidlyEA9MP8jGe1rEnyjGFCzLLgCdDpYeWggibayr0=", + "lastModified": 1758405547, + "narHash": "sha256-WgaDgvIZMPvlZcZrpPMjkaalTBnGF2lTG+62znXctWM=", "owner": "jcollie", "repo": "zon2nix", - "rev": "56c159be489cc6c0e73c3930bd908ddc6fe89613", + "rev": "bf983aa90ff169372b9fa8c02e57ea75e0b42245", "type": "github" }, "original": { "owner": "jcollie", - "ref": "56c159be489cc6c0e73c3930bd908ddc6fe89613", "repo": "zon2nix", + "rev": "bf983aa90ff169372b9fa8c02e57ea75e0b42245", "type": "github" } } diff --git a/home/bat.nix b/home/bat.nix new file mode 100644 index 0000000..dacf8b6 --- /dev/null +++ b/home/bat.nix @@ -0,0 +1,17 @@ +{ pkgs, ... }: { + programs.bat = { + enable = true; + config.theme = "catppuccin"; + + themes.catppuccin = { + src = pkgs.fetchFromGitHub { + owner = "catppuccin"; + repo = "bat"; + rev = "ba4d16880d63e656acced2b7d4e034e4a93f74b1"; + hash = "sha256-6WVKQErGdaqb++oaXnY3i6/GuH2FhTgK0v4TN4Y0Wbw="; + }; + + file = "/Catppuccin-mocha.tmTheme"; + }; + }; +} diff --git a/home/default.nix b/home/default.nix index 57a46b7..c463789 100644 --- a/home/default.nix +++ b/home/default.nix @@ -25,6 +25,8 @@ in { ./sway.nix ./terminal.nix ./browser.nix + ./zellij.nix + ./bat.nix ]; # Home Manager needs a bit of information about you and the @@ -39,6 +41,7 @@ in { sessionVariables = { XDG_CURRENT_DESKTOP = "sway"; XDG_SESSION_TYPE = "wayland"; + XDG_SESSION_DESKTOP="sway"; XDG_CONFIG_HOME = "$HOME/.config"; XDG_CACHE_HOME = "$HOME/.cache"; XDG_DATA_HOME = "$HOME/.local/share"; diff --git a/home/git.nix b/home/git.nix index 3f70aaa..db30f9d 100644 --- a/home/git.nix +++ b/home/git.nix @@ -15,8 +15,9 @@ extraConfig = { init.defaultBranch = "master"; push.autoSetupRemote = true; - pull.merge = true; + pull.rebase = false; merge.tool = "nvimdiff"; + mergetool.keepBackup = false; }; ignores = [ diff --git a/home/packages/common.nix b/home/packages/common.nix index bf5e39a..03034f2 100644 --- a/home/packages/common.nix +++ b/home/packages/common.nix @@ -4,7 +4,7 @@ ... }: { home.packages = with pkgs; [ - nnn # terminal file manager + yazi # terminal file manager # archives zip @@ -13,9 +13,7 @@ p7zip # utils - zellij tmux - bat lazygit bottom ripgrep diff --git a/home/packages/linux.nix b/home/packages/linux.nix index e26def3..eb7c33a 100644 --- a/home/packages/linux.nix +++ b/home/packages/linux.nix @@ -11,6 +11,10 @@ mcrcon xfce.thunar pavucontrol + godot + aseprite + gpu-screen-recorder + gpu-screen-recorder-gtk # ungoogled-chromium ]); } diff --git a/home/shell.nix b/home/shell.nix index 9941b9f..a2b4f98 100644 --- a/home/shell.nix +++ b/home/shell.nix @@ -1,4 +1,4 @@ -{pkgs, ...}: { +{pkgs, lib, ...}: { programs.fish = { enable = true; # initExtra = '' @@ -52,6 +52,27 @@ ''; onEvent = "fish_greeting"; }; + } // lib.optionalAttrs pkgs.stdenv.isLinux { + block = { + body = '' + systemd-inhibit --what=sleep --who="$USER" --why="manual invocation" --mode=block sleep infinity & + set -g INHIBIT_PID $last_pid + echo "Sleep inhibited. PID: $INHIBIT_PID" + ''; + }; + + unblock = { + body = '' + if set -q INHIBIT_PID + kill $INHIBIT_PID 2>/dev/null + and echo "Sleep inhibitor removed. PID: $INHIBIT_PID" + or echo "Failed to kill process or already terminated." + set -e INHIBIT_PID + else + echo "No active sleep inhibitor found." + end + ''; + }; }; }; diff --git a/home/sway.nix b/home/sway.nix index 7646596..8e81b1d 100644 --- a/home/sway.nix +++ b/home/sway.nix @@ -29,26 +29,123 @@ in { xdg.configFile."sway/config".source = lib.mkForce (dirs.defaults + /sway/config); xdg.configFile."waybar/config".source = lib.mkForce (dirs.defaults + /waybar/config); xdg.configFile."waybar/style.css".source = lib.mkForce (dirs.defaults + /waybar/style.css); - programs.rofi.enable = pkgs.stdenv.isLinux; - services.mako.enable = pkgs.stdenv.isLinux; + + programs.wofi = { + enable = pkgs.stdenv.isLinux; + settings = { + width=600; + height=350; + location="center"; + show="drun"; + prompt="Search..."; + filter_rate=100; + allow_markup=true; + no_actions=true; + halign="fill"; + orientation="vertical"; + content_halign="fill"; + insensitive=true; + allow_images=true; + image_size=40; + gtk_dark=true; + }; + style = '' + @define-color selected-text #8caaee; + @define-color text #c6d0f5; + @define-color base #24273a; + + * { + font-family: 'Monaspace Krypton 9', monospace; + font-size: 18px; + } + + window { + margin: 0px; + padding: 20px; + background-color: @base; + opacity: 0.95; + } + + #inner-box { + margin: 0; + padding: 0; + border: none; + background-color: @base; + } + + #outer-box { + margin: 0; + padding: 20px; + border: none; + background-color: @base; + } + + #scroll { + margin: 0; + padding: 0; + border: none; + background-color: @base; + } + + #input { + margin: 0; + padding: 10px; + border: none; + background-color: @base; + color: @text; + } + + #input:focus { + outline: none; + box-shadow: none; + border: none; + } + + #text { + margin: 5px; + border: none; + color: @text; + } + + #entry { + background-color: @base; + } + + #entry:selected { + outline: none; + border: none; + } + + #entry:selected #text { + color: @selected-text; + } + + #entry image { + -gtk-icon-transform: scale(0.7); + } + ''; + }; + programs.swaylock.enable = pkgs.stdenv.isLinux; + + services.mako = { + enable = pkgs.stdenv.isLinux; + settings = { + text-color="#cad3f5"; + border-color="#c6d0f5"; + background-color="#24273a"; + width=420; + height=110; + padding=10; + border-size=2; + font="Monaspace Krypton 9"; + anchor="top-right"; + default-timeout=5000; + max-icon-size=32; + }; + }; programs.waybar = { enable = pkgs.stdenv.isLinux; systemd.enable = true; - - package = pkgs.waybar.overrideAttrs (old: { - version = "0.11.0"; - - src = pkgs.fetchFromGitHub { - owner = "Alexays"; - repo = "Waybar"; - rev = "d56dd6ee7fdf8c5ba4e90790af62b7f7829d3a47"; - sha256 = "sha256-3lc0voMU5RS+mEtxKuRayq/uJO09X7byq6Rm5NZohq8="; - fetchSubmodules = true; - }; - - buildInputs = old.buildInputs ++ [ pkgs.fftw pkgs.libcava ]; - # mesonFlags = (old.mesonFlags or []) ++ [ "-Dcava=disabled" ]; - }); }; } diff --git a/home/zellij.nix b/home/zellij.nix new file mode 100644 index 0000000..fe24e9a --- /dev/null +++ b/home/zellij.nix @@ -0,0 +1,14 @@ +{ + lib, + ... +}: let + dirs = { + defaults = ../defaults; + }; +in { + programs.zellij = { + enable = true; + }; + + xdg.configFile."zellij/config.kdl".source = lib.mkForce (dirs.defaults + /zellij/config.kdl); +} diff --git a/modules/apps/appimage.nix b/modules/apps/appimage.nix new file mode 100644 index 0000000..2b6261e --- /dev/null +++ b/modules/apps/appimage.nix @@ -0,0 +1,19 @@ +{ + config, + lib, + pkgs, + ... +}: +with lib; let + cfg = config.appimage; +in { + options.appimage = { + enable = mkEnableOption "AppImage support"; + }; + config = mkIf cfg.enable { + environment.systemPackages = with pkgs; [ + appimageupdate + appimage-run + ]; + }; +} diff --git a/modules/common/default.nix b/modules/common/default.nix index 195ad06..27bcede 100644 --- a/modules/common/default.nix +++ b/modules/common/default.nix @@ -5,6 +5,7 @@ }: { imports = [ ./core.nix + ./environment.nix ./fonts.nix ./users.nix ]; diff --git a/modules/common/environment.nix b/modules/common/environment.nix new file mode 100644 index 0000000..2c7c8b9 --- /dev/null +++ b/modules/common/environment.nix @@ -0,0 +1,23 @@ +{ lib, pkgs, ... }: { + environment.systemPackages = with pkgs; [ + git + vim + neovim + usbutils + coreutils + pciutils + patchelf + htop + ] ++ + lib.optionals pkgs.stdenv.isLinux (with pkgs; [ + systemd + lshw + dmidecode + nix-ld + ]) ++ + lib.optionals pkgs.stdenv.isDarwin (with pkgs; [ + # nothing here, yet ;) + ]); + + environment.variables.EDITOR = "nvim"; +} diff --git a/modules/common/users.nix b/modules/common/users.nix index 60c2735..0ac1fb9 100644 --- a/modules/common/users.nix +++ b/modules/common/users.nix @@ -1,35 +1,38 @@ +{ lib, pkgs, userName, hostname, ... }: + { - lib, - pkgs, - userName, - hostname, - ... -} @ args: { - imports = [ - ../security/sudo.nix - ]; - networking.hostName = hostname; - - # Don't forget to set a password with ‘passwd’! - users.users."${userName}" = lib.mkMerge [ - { - home = - if pkgs.stdenv.isDarwin - then "/Users/${userName}" - else "/home/${userName}"; - description = userName; - } - - (lib.mkIf (pkgs.stdenv.isLinux) { - group = "${userName}"; - isNormalUser = true; - }) - ]; - - security.sudo.needsPassword = false; - + + users.users."${userName}" = { + home = if pkgs.stdenv.isDarwin + then "/Users/${userName}" + else "/home/${userName}"; + description = userName; + } // lib.optionalAttrs pkgs.stdenv.isLinux { + group = "${userName}"; + isNormalUser = true; + }; + users.groups.wyatt = {}; - nix.settings.trusted-users = [userName]; + + security = lib.optionalAttrs pkgs.stdenv.isLinux { + sudo.extraRules = [ + { + groups = [ "wheel" ]; + commands = [ + { + command = "ALL"; + options = [ "NOPASSWD" "SETENV" ]; + } + ]; + } + ]; + }; + + environment = lib.optionalAttrs pkgs.stdenv.isDarwin { + etc."sudoers.d/wheel-nopasswd".text = '' + %wheel ALL=(ALL:ALL) NOPASSWD: SETENV: ALL + ''; + }; } diff --git a/modules/machine/cloud/configuration.nix b/modules/machine/cloud/configuration.nix index eb691c5..4aa3fc8 100644 --- a/modules/machine/cloud/configuration.nix +++ b/modules/machine/cloud/configuration.nix @@ -21,11 +21,13 @@ in { inherit lib pkgs flatpakPackages; }) ../../apps/gaming.nix + ../../apps/appimage.nix ../../graphics ../../pwrMgmt ../../networking/core.nix ../../sound/pipewire.nix ../../sound/shairport.nix + ../../sound/focusrite.nix ../../virtualization/podman.nix ../../virtualization/hardware.nix ]; @@ -34,9 +36,13 @@ in { nix.settings.experimental-features = ["nix-command" "flakes"]; # Custom kernel/boot stuff - boot.kernelPackages = pkgs.linuxPackages_latest; - boot.loader.systemd-boot.enable = true; - boot.loader.efi.canTouchEfiVariables = true; + boot = { + kernelPackages = pkgs.linuxPackages_latest; + loader = { + systemd-boot.enable = true; + efi.canTouchEfiVariables = true; + }; + }; # Enable Bluetooth if present hardware.bluetooth.enable = true; @@ -46,40 +52,23 @@ in { # Install packages to be installed system-wide environment.systemPackages = with pkgs; [ - vim - neovim - git wireguard-tools grim slurp playerctl light brightnessctl - firefox wttrbar cliphist - patchelf - nix-ld + xdg-desktop-portal-gtk + xdg-utils + flatpak-xdg-utils + desktop-file-utils + shared-mime-info + wl-clipboard + wl-clip-persist ]; - # Set the EDITOR global environment variable to neovim - environment.variables.EDITOR = "nvim"; - - # Enable OpenSSH - services.openssh.enable = true; - - # Enable keyring - services.gnome.gnome-keyring.enable = true; - - # Enable GnuPG - programs.gnupg.agent = { - enable = true; - enableSSHSupport = true; - }; - - # Enable SUID wrappers (some programs need them) - programs.mtr.enable = true; - # Enable Polkit security.polkit.enable = true; @@ -147,28 +136,54 @@ in { networkManager.enable = true; }; - # Enable dconf - programs.dconf.enable = true; + programs = { + # Enable GnuPG + gnupg.agent = { + enable = true; + enableSSHSupport = true; + }; + + # Enable SUID wrappers (some programs need them) + mtr.enable = true; + + # Enable dconf + dconf.enable = true; + }; # Add username to groups "wheel" and "video" - more may be added here later users.users.${userName}.extraGroups = ["wheel" "video" "gamemode" "podman" "network"]; - # Flatpak packages (see ../../apps/flatpak.nix) - services.flatpak.packages = flatpakPackages; + services = { + # Enable OpenSSH + openssh.enable = true; + + # Enable keyring + gnome.gnome-keyring.enable = true; + + # Flatpak packages (see ../../apps/flatpak.nix) + flatpak.packages = flatpakPackages; + }; + + # Focusrite Scarlett audio interface support (see ../../sound/focusrite.nix) + sound.hardware.focusrite.enable = true; + + # AppImage support + appimage.enable = true; # XDG stuff xdg = { portal = { enable = true; - wlr.enable = true; config = { + sway = { + default = ["wlr" "gtk"]; + "org.freedesktop.impl.portal.Secret" = ["gnome-keyring"]; + }; common = { - default = [ - "wlr" - ]; + default = ["gtk"]; + "org.freedesktop.impl.portal.Secret" = ["gnome-keyring"]; }; }; - xdgOpenUsePortal = true; extraPortals = with pkgs; [ xdg-desktop-portal-wlr xdg-desktop-portal-gtk diff --git a/modules/machine/valefor/README.md b/modules/machine/valefor/README.md index 1f2e918..f595b47 100644 --- a/modules/machine/valefor/README.md +++ b/modules/machine/valefor/README.md @@ -6,4 +6,4 @@ Licensed by the Mozilla Public License v2 ## Synopsis -This directory is currently empty so, currently, there's nothing to see! However, this is where the machine-specific configuration files for hostname `valefor` live, my apartment appliance server. These files get called by the root `flake.nix` file. +This is where the machine-specific configuration files for hostname `valefor` live, my apartment appliance server. These files get called by the root `flake.nix` file. \ No newline at end of file diff --git a/modules/machine/valefor/configuration.nix b/modules/machine/valefor/configuration.nix index 53930bf..7848de6 100644 --- a/modules/machine/valefor/configuration.nix +++ b/modules/machine/valefor/configuration.nix @@ -27,18 +27,6 @@ # Set your timezone time.timeZone = "America/Detroit"; - # Install packages to be installed system-wide - environment.systemPackages = with pkgs; [ - vim - neovim - git - patchelf - nix-ld - ]; - - # Set the EDITOR global environment variable to neovim - environment.variables.EDITOR = "nvim"; - # Enable OpenSSH services.openssh.enable = true; diff --git a/modules/security/sudo.nix b/modules/security/sudo.nix index 79360e8..e71b56d 100644 --- a/modules/security/sudo.nix +++ b/modules/security/sudo.nix @@ -5,7 +5,7 @@ }: with lib; { options = { - security.sudo = { + security.sudoers = { needsPassword = mkOption { type = types.bool; default = true; diff --git a/modules/sound/focusrite.nix b/modules/sound/focusrite.nix new file mode 100644 index 0000000..39de544 --- /dev/null +++ b/modules/sound/focusrite.nix @@ -0,0 +1,33 @@ +# Must be paired with the pipewire Nix module, this does nothing but install packages +{ + config, + lib, + pkgs, + ... +}: +with lib; let + cfg = config.sound.hardware.focusrite; +in { + options.sound.hardware.focusrite = { + enable = mkEnableOption "Focusrite audio interface support"; + guiSupport = mkOption { + type = types.bool; + default = false; + description = "Enable GUI support for Focusrite Scarlett audio interface (installs alsa-scarlett-gui)"; + }; + }; + config = mkIf cfg.enable (mkMerge [ + { + environment.systemPackages = with pkgs; + [ + scarlett2 + alsa-scarlett-gui + ] + ++ ( + if cfg.guiSupport + then [pkgs.alsa-scarlett-gui] + else [] + ); + } + ]); +}