diff --git a/dotfiles/satty/config.toml b/dotfiles/satty/config.toml deleted file mode 100644 index c658b89..0000000 --- a/dotfiles/satty/config.toml +++ /dev/null @@ -1,70 +0,0 @@ -[general] -# Start Satty in fullscreen mode -fullscreen = true -# Exit directly after copy/save action -early-exit = true -# Draw corners of rectangles round if the value is greater than 0 (0 disables rounded corners) -corner-roundness = 12 -# Select the tool on startup [possible values: pointer, crop, line, arrow, rectangle, text, marker, blur, brush] -initial-tool = "crop" -# Configure the command to be called on copy, for example `wl-copy` -copy-command = "wl-copy" -# Increase or decrease the size of the annotations -annotation-size-factor = 2 -# Filename to use for saving action. Omit to disable saving to file. Might contain format specifiers: https://docs.rs/chrono/latest/chrono/format/strftime/index.html -output-filename = "/home/szymon/Obrazy/zrzuty/%d-%m-%Y_%H:%M:%S.png" -# After copying the screenshot, save it to a file as well -save-after-copy = true -# Hide toolbars by default -default-hide-toolbars = false -# The primary highlighter to use, the other is accessible by holding CTRL at the start of a highlight [possible values: block, freehand] -primary-highlighter = "block" -# Disable notifications -disable-notifications = false -# Actions to trigger on right click (order is important) -# [possible values: save-to-clipboard, save-to-file, exit] -actions-on-right-click = [] -# Actions to trigger on Enter key (order is important) -# [possible values: save-to-clipboard, save-to-file, exit] -actions-on-enter = ["save-to-clipboard"] -# Actions to trigger on Escape key (order is important) -# [possible values: save-to-clipboard, save-to-file, exit] -actions-on-escape = ["exit"] -# Action to perform when the Enter key is pressed [possible values: save-to-clipboard, save-to-file] -# Deprecated: use actions-on-enter instead -action-on-enter = "save-to-clipboard" -# Right click to copy -# Deprecated: use actions-on-right-click instead -right-click-copy = false -# request no window decoration. Please note that the compositor has the final say in this. At this point. requires xdg-decoration-unstable-v1. -no-window-decoration = true -# experimental feature: adjust history size for brush input smooting (0: disabled, default: 0, try e.g. 5 or 10) -brush-smooth-history-size = 10 - -# Font to use for text annotations -[font] -family = "Roboto" -style = "Bold" - -# Custom colours for the colour palette -[color-palette] -# These will be shown in the toolbar for quick selection -palette = [ - "#00ffff", - "#a52a2a", - "#dc143c", - "#ff1493", - "#ffd700", - "#008000", -] - -# These will be available in the color picker as presets -# Leave empty to use GTK's default -custom = [ - "#00ffff", - "#a52a2a", - "#dc143c", - "#ff1493", - "#ffd700", - "#008000", -] diff --git a/flake.nix b/flake.nix index 4672dd2..7f9e5be 100644 --- a/flake.nix +++ b/flake.nix @@ -7,7 +7,6 @@ url = "github:nix-community/home-manager"; inputs.nixpkgs.follows = "nixpkgs"; }; - catppuccin.url = "github:catppuccin/nix"; }; @@ -20,7 +19,7 @@ }: let - user = "szymon"; + username = "szymon"; # for git email = "szymon_jozef@proton.me"; full_name = "Szymon P"; @@ -30,10 +29,8 @@ "arch" = home-manager.lib.homeManagerConfiguration { pkgs = import nixpkgs { system = "x86_64-linux"; }; extraSpecialArgs = { + inherit username email full_name; isNixOS = false; - username = user; - email = email; - full_name = full_name; }; modules = [ ./home.nix @@ -44,10 +41,8 @@ "nixos" = home-manager.lib.homeManagerConfiguration { pkgs = import nixpkgs { system = "x86_64-linux"; }; extraSpecialArgs = { + inherit username email full_name; isNixOS = true; - username = user; - email = email; - full_name = full_name; }; modules = [ ./home.nix diff --git a/home.nix b/home.nix index 5c44840..c4e261d 100644 --- a/home.nix +++ b/home.nix @@ -1,18 +1,13 @@ { pkgs, - isNixOS, username, ... }: { - # Home Manager needs a bit of information about you and the paths it should - # manage. home.username = username; home.homeDirectory = "/home/${username}"; - home.file."test-os.txt".text = if isNixOS then "this is nixos" else "this is arch"; - nix = { package = pkgs.nix; settings.experimental-features = [ @@ -21,6 +16,7 @@ ]; }; + # === THEME === catppuccin = { enable = true; flavor = "mocha"; @@ -41,32 +37,28 @@ ./modules/kitty.nix ./modules/satty.nix ./modules/ashell.nix + ./modules/waybar.nix ]; - home.stateVersion = "25.11"; # Please read the comment before changing. - - # The home.packages option allows you to install Nix packages into your - # environment. - - # Home Manager is pretty good at managing dotfiles. The primary way to manage - # plain files is through 'home.file'. + # === DOTFILES IMPORT === home.file = { ".config/fastfetch".source = ./dotfiles/fastfetch; ".config/MangoHud".source = ./dotfiles/mangohud; ".config/nvim".source = ./dotfiles/nvim; ".config/gtk-3.0/settings.ini".source = ./dotfiles/gtk-3.0/settings.ini; ".config/gtk-4.0".source = ./dotfiles/gtk-4.0; - ".config/waybar".source = ./dotfiles/waybar; ".config/hypr".source = ./dotfiles/hypr; ".config/mimeapps.list".source = ./dotfiles/mimeapps.list; ".local/bin".source = ./scripts; }; + # === VARS === + home.sessionVariables = { EDITOR = "nvim"; VISUAL = "nvim"; }; - # Let Home Manager install and manage itself. programs.home-manager.enable = true; + home.stateVersion = "25.11"; # DONT CHANGE ME UwU } diff --git a/modules/packages.nix b/modules/packages.nix index f06fbbc..4ae1eb2 100644 --- a/modules/packages.nix +++ b/modules/packages.nix @@ -17,5 +17,6 @@ slurp wl-clipboard bc + nh ]; } diff --git a/modules/waybar.nix b/modules/waybar.nix new file mode 100644 index 0000000..c2997fd --- /dev/null +++ b/modules/waybar.nix @@ -0,0 +1,343 @@ +{ + pkgs, + isNixOS, + ... +}: + +{ + programs.waybar = { + enable = true; + package = + if isNixOS then pkgs.waybar else (pkgs.writeShellScriptBin "waybar" "exec /usr/bin/waybar \"$@\""); + settings = { + mainBar = { + layer = "top"; + position = "right"; + spacing = 4; + margin-top = 10; + margin-bottom = 10; + margin-left = 8; + margin-right = 8; + mode = "dock"; + reload_style_on_change = true; + width = 70; + output = [ + "DP-1" + "eDP-1" + "LVDS-1" + ]; + + modules-left = [ + "clock" + "custom/notifications" + "privacy" + "custom/spotify" + "pulseaudio" + ]; + modules-center = [ + "hyprland/workspaces" + ]; + modules-right = [ + "battery" + "tray" + ]; + + "hyprland/workspaces" = { + format = "{} - {icon}"; + on-click = "activate"; + on-click-right = "close"; + all-outputs = true; + active-only = false; + sort-by-number = true; + format-icons = { + "1" = ""; + "2" = ""; + "3" = ""; + "4" = ""; + "5" = ""; + "6" = ""; + "7" = ""; + "8" = ""; + "9" = ""; + "10" = ""; + default = ""; + }; + }; + + tray = { + spacing = 10; + }; + + clock = { + format = "{:%R}"; + format-alt = "{:%d.%m.%Y}"; + tooltip-format = "{:%Y %B}\n{calendar}"; + calendar = { + mode = "year"; + mode-mon-col = 3; + weeks-pos = "right"; + on-scroll = 1; + format = { + months = "{}"; + days = "{}"; + weeks = "W{}"; + weekdays = "{}"; + today = "{}"; + }; + actions = { + on-click-right = "mode"; + on-scroll-up = "tz_up"; + on-scroll-down = "tz_down"; + }; + }; + }; + + network = { + format-wifi = " ({signalStrength}%)  "; + format-ethernet = ""; + tooltip-format = "{ifname} via {gwaddr} with {ipaddr}/{cidr} "; + format-linked = "{ifname} (No IP) "; + format-disconnected = "Disconnected ⚠"; + on-click = "kitty nmtui"; + }; + + pulseaudio = { + format = "{volume}% {icon}"; + format-bluetooth = "{volume}% {icon} {format_source}"; + format-bluetooth-muted = " {icon} {format_source}"; + format-muted = "  "; + format-source = " {volume}% "; + format-source-muted = "  "; + format-icons = { + headphone = ""; + hands-free = " "; + headset = " "; + phone = " "; + portable = " "; + car = " "; + default = [ + "" + "" + "" + ]; + }; + on-click = "pavucontrol -t 3"; + on-click-right = "pactl set-sink-mute @DEFAULT_SINK@ toggle"; + }; + + "custom/spotify" = { + format = "{}"; + return-type = "json"; + on-click = "playerctl play-pause --player spotify"; + on-click-right = "killall spotify"; + on-scroll-up = "playerctl next --player spotify"; + on-scroll-down = "playerctl previous --player spotify"; + restart-interval = 0; + hide-empty-text = true; + justify = "center"; + max-length = 40; + exec = + let + playerctl = "${pkgs.playerctl}/bin/playerctl"; + jq = "${pkgs.jq}/bin/jq"; + pkill = "${pkgs.procps}/bin/pkill"; + + mediaPlayerScript = pkgs.writeShellScript "mediaplayer" '' + if [ -z "$1" ]; then + echo "Użycie: $0 " + exit 1 + fi + + player="$1" + + ${playerctl} -p "$player" metadata --format "{{status}} {{artist}} - {{title}}" --follow | while read -r line; do + # Nix wymaga ''${ dla zmiennych basha w stringach nixowych + current_status=$(${playerctl} --player="$player" status 2>/dev/null) + + case "$current_status" in + "Playing") + icon="" + ;; + "Paused") + icon="" + ;; + *) + icon="" + ;; + esac + + tooltip=$(${playerctl} --player="$player" metadata --format "{{artist}} - {{title}}" 2>/dev/null) + + ${jq} -nc --arg text "$icon" --arg tooltip "$tooltip" \ + '{"text": $text, "tooltip": $tooltip}' + + if [[ -n "$icon" ]]; then + ${pkill} -SIGRTMIN+1 waybar + fi + done + ''; + in + "${mediaPlayerScript} spotify"; + }; + + "custom/notifications" = { + format = "{text}"; + on-click-right = "~/.local/bin/check-do-not-disturb.sh change"; + exec = "~/.local/bin/check-do-not-disturb.sh show"; + exec-on-event = "~/.local/bin/check-do-not-disturb.sh show"; + tooltip = false; + return-type = "text"; + signal = 2; + }; + }; + }; + + style = '' + @define-color rosewater #f5e0dc; + @define-color flamingo #f2cdcd; + @define-color pink #f5c2e7; + @define-color mauve #cba6f7; + @define-color red #f38ba8; + @define-color maroon #eba0ac; + @define-color peach #fab387; + @define-color yellow #f9e2af; + @define-color green #a6e3a1; + @define-color teal #94e2d5; + @define-color sky #89dceb; + @define-color sapphire #74c7ec; + @define-color blue #89b4fa; + @define-color lavender #b4befe; + @define-color text #cdd6f4; + @define-color subtext1 #bac2de; + @define-color subtext0 #a6adc8; + @define-color overlay2 #9399b2; + @define-color overlay1 #7f849c; + @define-color overlay0 #6c7086; + @define-color surface2 #585b70; + @define-color surface1 #45475a; + @define-color surface0 #313244; + @define-color base #1e1e2e; + @define-color mantle #181825; + @define-color crust #11111b; + + /* Global styles */ + * { + transition: 0.2s all ease-in-out; + font-size: 14px; + font-family: inherit; + padding: 3px; + margin: 1px 2px; + color: @text; + border-radius: 12px; + } + + *:hover { + text-shadow: none; + } + + /* Window */ + window#waybar { + background-color: @base; + border-radius: 15px; + } + + /* Workspaces */ + #workspaces button { + padding: 2px; + margin: 1px; + background: transparent; + color: @lavender; + box-shadow: inset 0 1.5px; + } + + #workspaces button:hover { + background-color: @surface1; + box-shadow: inset 2px 5px; + } + + #workspaces button.active { + background-color: @surface0; + box-shadow: inset 1px 4px 0 1px; + } + + #workspaces button.urgent { + background-color: @red; + animation-name: blink; + animation-duration: 1s; + animation-timing-function: steps(12); + animation-iteration-count: infinite; + animation-direction: alternate; + } + + /* Clock */ + #clock { + font-style: oblique; + opacity: 1; + } + + /* Modules */ + .modules-left, + .modules-right, + .modules-center { + background-color: @crust; + } + + /* Tray */ + #tray>.needs-attention { + background-color: @red; + } + + /* Custom */ + #custom-spotify:hover { + background-color: @green; + } + + #network:hover { + background-color: @sky; + } + + #custom-notifications:hover { + background-color: @sapphire; + } + + /* Battery */ + #battery { + background-color: @base; + } + + #battery.warning:not(.charging) { + background: @yellow; + color: @foreground; + animation-name: blink; + animation-duration: 1s; + animation-timing-function: steps(12); + animation-iteration-count: infinite; + animation-direction: alternate; + } + + #battery.charging, + #battery.plugged { + color: @foreground; + background-color: @green; + } + + #battery.critical:not(.charging) { + background-color: @red; + color: @foreground; + animation-name: blink; + animation-duration: 1s; + animation-timing-function: steps(12); + animation-iteration-count: infinite; + animation-direction: alternate; + } + + @keyframes blink { + to { + background-color: #ff0000; + color: #000000; + } + } + ''; + + }; +}