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;
+ }
+ }
+ '';
+
+ };
+}