diff --git a/dotfiles/hyprland.conf b/dotfiles/hyprland.conf index 7c686eb..61a7805 100644 --- a/dotfiles/hyprland.conf +++ b/dotfiles/hyprland.conf @@ -11,8 +11,8 @@ monitor=,preferred,auto,auto # See https://wiki.hyprland.org/Configuring/Keywords/ $terminal = kitty -$fileManager = dolphin -$menu = wofi --show drun +$fileManager = thunar +$menu = rofi -show drun ################# ### AUTOSTART ### @@ -21,8 +21,12 @@ $menu = wofi --show drun # exec-once = $terminal # exec-once = nm-applet & # exec-once = waybar & hyprpaper & firefox -exec-once = waybar -exec-once = swaync +exec-once = dbus-update-activation-environment --systemd --all +exec-once = systemctl --user import-environment QT_QPA_PLATFORMTHEME WAYLAND_DISPLAY XDG_CURRENT_DESKTOP +exec-once = killall -q swww;sleep .5 && swww init +exec-once = killall -q waybar;sleep .5 && waybar +exec-once = killall -q swaync;sleep .5 && swaync +exec-once = rainbow-border & ############################# ### ENVIRONMENT VARIABLES ### @@ -31,6 +35,17 @@ exec-once = swaync # See https://wiki.hyprland.org/Configuring/Environment-variables/ env = XCURSOR_SIZE,24 env = HYPRCURSOR_SIZE,24 +env = NIXOS_OZONE_WL, 1 +env = XDG_CURRENT_DESKTOP, Hyprland +env = XDG_SESSION_TYPE, Hyprland +env = XDG_SESSION_DESKTOP, Hyprland +env = GDK_BACKEND, wayland, x11 +env = CLUTTER_BACKEND, wayland +env = QT_QPA_PLATFORM=wayland;xcb +env = QT_WAYLAND_DISABLE_WINDOWDECORATION, 1 +env = QT_AUTO_SCREEN_SCALE_FACTOR, 1 +env = SDL_VIDEODRIVER, x11 +env = MOZ_ENABLE_WAYLAND, 1 ##################### ### LOOK AND FEEL ### @@ -38,8 +53,8 @@ env = HYPRCURSOR_SIZE,24 # Refer to https://wiki.hyprland.org/Configuring/Variables/ # https://wiki.hyprland.org/Configuring/Variables/#general general { - gaps_in = 5 - gaps_out = 20 + gaps_in = 6 + gaps_out = 8 border_size = 2 # https://wiki.hyprland.org/Configuring/Variables/#variable-types for info about colors @@ -74,7 +89,9 @@ decoration { blur { enabled = true size = 3 - passes = 1 + passes = 3 + new_optimizations = on + ignore_opacity = off vibrancy = 0.1696 } @@ -86,30 +103,48 @@ animations { # Default animations, see https://wiki.hyprland.org/Configuring/Animations/ for more - bezier = easeOutQuint,0.23,1,0.32,1 - bezier = easeInOutCubic,0.65,0.05,0.36,1 - bezier = linear,0,0,1,1 - bezier = almostLinear,0.5,0.5,0.75,1.0 - bezier = quick,0.15,0,0.1,1 + # bezier = easeOutQuint,0.23,1,0.32,1 + # bezier = easeInOutCubic,0.65,0.05,0.36,1 + # bezier = linear,0,0,1,1 + # bezier = almostLinear,0.5,0.5,0.75,1.0 + # bezier = quick,0.15,0,0.1,1 - animation = global, 1, 10, default - animation = border, 1, 5.39, easeOutQuint - animation = windows, 1, 4.79, easeOutQuint - animation = windowsIn, 1, 4.1, easeOutQuint, popin 87% - animation = windowsOut, 1, 1.49, linear, popin 87% - animation = fadeIn, 1, 1.73, almostLinear - animation = fadeOut, 1, 1.46, almostLinear - animation = fade, 1, 3.03, quick - animation = layers, 1, 3.81, easeOutQuint - animation = layersIn, 1, 4, easeOutQuint, fade - animation = layersOut, 1, 1.5, linear, fade - animation = fadeLayersIn, 1, 1.79, almostLinear - animation = fadeLayersOut, 1, 1.39, almostLinear - animation = workspaces, 1, 1.94, almostLinear, fade - animation = workspacesIn, 1, 1.21, almostLinear, fade - animation = workspacesOut, 1, 1.94, almostLinear, fade + # animation = global, 1, 10, default + # animation = border, 1, 5.39, easeOutQuint + # animation = windows, 1, 4.79, easeOutQuint + # animation = windowsIn, 1, 4.1, easeOutQuint, popin 87% + # animation = windowsOut, 1, 1.49, linear, popin 87% + # animation = fadeIn, 1, 1.73, almostLinear + # animation = fadeOut, 1, 1.46, almostLinear + # animation = fade, 1, 3.03, quick + # animation = layers, 1, 3.81, easeOutQuint + # animation = layersIn, 1, 4, easeOutQuint, fade + # animation = layersOut, 1, 1.5, linear, fade + # animation = fadeLayersIn, 1, 1.79, almostLinear + # animation = fadeLayersOut, 1, 1.39, almostLinear + # animation = workspaces, 1, 1.94, almostLinear, fade + # animation = workspacesIn, 1, 1.21, almostLinear, fade + # animation = workspacesOut, 1, 1.94, almostLinear, fade + bezier = wind, 0.05, 0.9, 0.1, 1.05 + bezier = winIn, 0.1, 1.1, 0.1, 1.1 + bezier = winOut, 0.3, -0.3, 0, 1 + bezier = liner, 1, 1, 1, 1 + animation = windows, 1, 6, wind, slide + animation = windowsIn, 1, 6, winIn, slide + animation = windowsOut, 1, 5, winOut, slide + animation = windowsMove, 1, 5, wind, slide + animation = border, 1, 1, liner + animation = fade, 1, 10, default + animation = workspaces, 1, 5, wind } +plugin { + hyprtrails { + + } +} + + # Ref https://wiki.hyprland.org/Configuring/Workspace-Rules/ # "Smart gaps" / "No gaps when only" # uncomment all if you wish to use that. @@ -143,15 +178,16 @@ misc { # https://wiki.hyprland.org/Configuring/Variables/#input input { - kb_layout = us_intl + kb_layout = us,us_intl kb_variant = kb_model = - kb_options = + kb_options = grp:win_space_toggle kb_rules = follow_mouse = 1 - sensitivity = 0 # -1.0 - 1.0, 0 means no modification. + sensitivity = 0 # -1.0 - 1.0, 0 means no modification + accel_profile = flat touchpad { natural_scroll = false @@ -187,6 +223,12 @@ bind = $mainMod, V, togglefloating, bind = $mainMod, R, exec, $menu bind = $mainMod, P, pseudo, # dwindle bind = $mainMod, J, togglesplit, # dwindle +bind = $mainMod, L, exec, hyprlock + +bind = , Print, exec, "grim" +# bind = $mainMod, Print, exec, "grim - | swappy -f -" +# bind = SHIFT, Print, exec, "grim -g \"$(slurp)\"" +bind = $mainMod SHIFT, Print, exec, screenshot # Move focus with mainMod + arrow keys bind = $mainMod, left, movefocus, l @@ -244,6 +286,9 @@ bindl = , XF86AudioPause, exec, playerctl play-pause bindl = , XF86AudioPlay, exec, playerctl play-pause bindl = , XF86AudioPrev, exec, playerctl previous +bind = ALT, Tab, cyclenext +bind = ALT, Tab, bringactivetotop + ############################## ### WINDOWS AND WORKSPACES ### ############################## @@ -257,6 +302,13 @@ bindl = , XF86AudioPrev, exec, playerctl previous # Example windowrule v2 # windowrulev2 = float,class:^(kitty)$,title:^(kitty)$ +windowrule = noborder,^(wofi)$ +windowrule = center,^(wofi)$ +windowrule = center,^(steam)$ +windowrule = float, swayimg|vlc|Viewnior|pavucontrol +windowrule = float, nwg-look|qt5ct|mpv +windowrule = float, zoom + # Ignore maximize requests from apps. You'll probably like this. windowrulev2 = suppressevent maximize, class:.* diff --git a/flake.lock b/flake.lock index 5051764..1c1f6a2 100644 --- a/flake.lock +++ b/flake.lock @@ -1,5 +1,141 @@ { "nodes": { + "base16": { + "inputs": { + "fromYaml": "fromYaml" + }, + "locked": { + "lastModified": 1732200724, + "narHash": "sha256-+R1BH5wHhfnycySb7Sy5KbYEaTJZWm1h+LW1OtyhiTs=", + "owner": "SenchoPens", + "repo": "base16.nix", + "rev": "153d52373b0fb2d343592871009a286ec8837aec", + "type": "github" + }, + "original": { + "owner": "SenchoPens", + "repo": "base16.nix", + "type": "github" + } + }, + "base16-fish": { + "flake": false, + "locked": { + "lastModified": 1622559957, + "narHash": "sha256-PebymhVYbL8trDVVXxCvZgc0S5VxI7I1Hv4RMSquTpA=", + "owner": "tomyun", + "repo": "base16-fish", + "rev": "2f6dd973a9075dabccd26f1cded09508180bf5fe", + "type": "github" + }, + "original": { + "owner": "tomyun", + "repo": "base16-fish", + "type": "github" + } + }, + "base16-helix": { + "flake": false, + "locked": { + "lastModified": 1725860795, + "narHash": "sha256-Z2o8VBPW3I+KKTSfe25kskz0EUj7MpUh8u355Z1nVsU=", + "owner": "tinted-theming", + "repo": "base16-helix", + "rev": "7f795bf75d38e0eea9fed287264067ca187b88a9", + "type": "github" + }, + "original": { + "owner": "tinted-theming", + "repo": "base16-helix", + "type": "github" + } + }, + "base16-vim": { + "flake": false, + "locked": { + "lastModified": 1731949548, + "narHash": "sha256-XIDexXM66sSh5j/x70e054BnUsviibUShW7XhbDGhYo=", + "owner": "tinted-theming", + "repo": "base16-vim", + "rev": "61165b1632409bd55e530f3dbdd4477f011cadc6", + "type": "github" + }, + "original": { + "owner": "tinted-theming", + "repo": "base16-vim", + "type": "github" + } + }, + "flake-compat": { + "flake": false, + "locked": { + "lastModified": 1696426674, + "narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=", + "owner": "edolstra", + "repo": "flake-compat", + "rev": "0f9255e01c2351cc7d116c072cb317785dd33b33", + "type": "github" + }, + "original": { + "owner": "edolstra", + "repo": "flake-compat", + "type": "github" + } + }, + "flake-utils": { + "inputs": { + "systems": [ + "stylix", + "systems" + ] + }, + "locked": { + "lastModified": 1731533236, + "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "fromYaml": { + "flake": false, + "locked": { + "lastModified": 1731966426, + "narHash": "sha256-lq95WydhbUTWig/JpqiB7oViTcHFP8Lv41IGtayokA8=", + "owner": "SenchoPens", + "repo": "fromYaml", + "rev": "106af9e2f715e2d828df706c386a685698f3223b", + "type": "github" + }, + "original": { + "owner": "SenchoPens", + "repo": "fromYaml", + "type": "github" + } + }, + "gnome-shell": { + "flake": false, + "locked": { + "lastModified": 1732369855, + "narHash": "sha256-JhUWbcYPjHO3Xs3x9/Z9RuqXbcp5yhPluGjwsdE2GMg=", + "owner": "GNOME", + "repo": "gnome-shell", + "rev": "dadd58f630eeea41d645ee225a63f719390829dc", + "type": "github" + }, + "original": { + "owner": "GNOME", + "ref": "47.2", + "repo": "gnome-shell", + "type": "github" + } + }, "home-manager": { "inputs": { "nixpkgs": [ @@ -20,6 +156,27 @@ "type": "github" } }, + "home-manager_2": { + "inputs": { + "nixpkgs": [ + "stylix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1733085484, + "narHash": "sha256-dVmNuUajnU18oHzBQWZm1BQtANCHaqNuxTHZQ+GN0r8=", + "owner": "nix-community", + "repo": "home-manager", + "rev": "c1fee8d4a60b89cae12b288ba9dbc608ff298163", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "home-manager", + "type": "github" + } + }, "nixpkgs": { "locked": { "lastModified": 1733015953, @@ -36,10 +193,122 @@ "type": "github" } }, + "nixpkgs_2": { + "locked": { + "lastModified": 1732238832, + "narHash": "sha256-sQxuJm8rHY20xq6Ah+GwIUkF95tWjGRd1X8xF+Pkk38=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "8edf06bea5bcbee082df1b7369ff973b91618b8d", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, "root": { "inputs": { "home-manager": "home-manager", - "nixpkgs": "nixpkgs" + "nixpkgs": "nixpkgs", + "stylix": "stylix" + } + }, + "stylix": { + "inputs": { + "base16": "base16", + "base16-fish": "base16-fish", + "base16-helix": "base16-helix", + "base16-vim": "base16-vim", + "flake-compat": "flake-compat", + "flake-utils": "flake-utils", + "gnome-shell": "gnome-shell", + "home-manager": "home-manager_2", + "nixpkgs": "nixpkgs_2", + "systems": "systems", + "tinted-foot": "tinted-foot", + "tinted-kitty": "tinted-kitty", + "tinted-tmux": "tinted-tmux" + }, + "locked": { + "lastModified": 1734110168, + "narHash": "sha256-Q0eeLYn45ErXlqGQyXmLLHGe1mqnUiK0Y9wZRa1SNFI=", + "owner": "danth", + "repo": "stylix", + "rev": "a9e3779949925ef22f5a215c5f49cf520dea30b1", + "type": "github" + }, + "original": { + "owner": "danth", + "repo": "stylix", + "type": "github" + } + }, + "systems": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, + "tinted-foot": { + "flake": false, + "locked": { + "lastModified": 1726913040, + "narHash": "sha256-+eDZPkw7efMNUf3/Pv0EmsidqdwNJ1TaOum6k7lngDQ=", + "owner": "tinted-theming", + "repo": "tinted-foot", + "rev": "fd1b924b6c45c3e4465e8a849e67ea82933fcbe4", + "type": "github" + }, + "original": { + "owner": "tinted-theming", + "repo": "tinted-foot", + "rev": "fd1b924b6c45c3e4465e8a849e67ea82933fcbe4", + "type": "github" + } + }, + "tinted-kitty": { + "flake": false, + "locked": { + "lastModified": 1716423189, + "narHash": "sha256-2xF3sH7UIwegn+2gKzMpFi3pk5DlIlM18+vj17Uf82U=", + "owner": "tinted-theming", + "repo": "tinted-kitty", + "rev": "eb39e141db14baef052893285df9f266df041ff8", + "type": "github" + }, + "original": { + "owner": "tinted-theming", + "repo": "tinted-kitty", + "rev": "eb39e141db14baef052893285df9f266df041ff8", + "type": "github" + } + }, + "tinted-tmux": { + "flake": false, + "locked": { + "lastModified": 1729501581, + "narHash": "sha256-1ohEFMC23elnl39kxWnjzH1l2DFWWx4DhFNNYDTYt54=", + "owner": "tinted-theming", + "repo": "tinted-tmux", + "rev": "f0e7f7974a6441033eb0a172a0342e96722b4f14", + "type": "github" + }, + "original": { + "owner": "tinted-theming", + "repo": "tinted-tmux", + "type": "github" } } }, diff --git a/flake.nix b/flake.nix index 9659549..9934483 100644 --- a/flake.nix +++ b/flake.nix @@ -3,11 +3,11 @@ inputs = { nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; - home-manager = { url = "github:nix-community/home-manager"; inputs.nixpkgs.follows = "nixpkgs"; }; + stylix.url = "github:danth/stylix"; }; outputs = { @@ -21,7 +21,10 @@ { nixosConfigurations = { home = nixpkgs.lib.nixosSystem { - specialArgs = {inherit inputs;}; + specialArgs = { + inherit system; + inherit inputs; + }; modules = [ ./modules/nixos/cli-environment.nix ./modules/nixos/desktop-apps.nix @@ -30,6 +33,7 @@ ./modules/nixos/gaming.nix ./modules/nixos/window-manager.nix ./hosts/home/configuration.nix + inputs.stylix.nixosModules.stylix inputs.home-manager.nixosModules.default ]; }; diff --git a/hosts/home/configuration.nix b/hosts/home/configuration.nix index 34c35ab..60ffe77 100644 --- a/hosts/home/configuration.nix +++ b/hosts/home/configuration.nix @@ -8,10 +8,16 @@ ]; # Bootloader. - boot.loader.grub.enable = true; - boot.loader.grub.device = "/dev/sda"; - boot.loader.grub.useOSProber = true; - boot.supportedFilesystems = [ "ntfs" ]; + boot = { + loader.grub.enable = true; + loader.grub.device = "/dev/sda"; + loader.grub.useOSProber = true; + supportedFilesystems = [ "ntfs" ]; + # tmp = { + # useTmpfs = false; + # tmpfsSize = "30%"; + # }; + }; fileSystems."/mnt/apps" = { device = "/dev/disk/by-label/Apps"; @@ -32,10 +38,18 @@ }; networking.hostName = "arcueid"; # Define your hostname. - nix.settings.experimental-features = [ "nix-command" "flakes" ]; networking.networkmanager.enable = true; - - hardware.logitech.lcd.enable = true; + nix = { + settings = { + auto-optimise-store = true; + experimental-features = [ "nix-command" "flakes" ]; + }; + gc = { + automatic = true; + dates = "weekly"; + options = "--delete-older-than 10d"; + }; + }; time.timeZone = "Europe/Paris"; i18n.defaultLocale = "fr_FR.UTF-8"; @@ -52,39 +66,47 @@ LC_TIME = "fr_FR.UTF-8"; }; - services.xserver.enable = true; - services.xserver.xkb = { - layout = "us"; - variant = "altgr-intl"; + hardware = { + sane.enable = true; + pulseaudio.enable = false; + graphics.enable = true; }; - services.printing.enable = true; - services.avahi = { - enable = true; - nssmdns4 = true; - openFirewall = true; - }; - # TODO Add Scanner configuration - - hardware.logitech.lcd.devices = [ - "c22d" "c22e" - ]; - - hardware.pulseaudio.enable = false; security.rtkit.enable = true; - services.pipewire = { - enable = true; - alsa.enable = true; - alsa.support32Bit = true; - pulse.enable = true; + + services = { + xserver.enable = true; + xserver.xkb = { + layout = "us"; + variant = "altgr-intl"; + }; + printing.enable = true; + avahi = { + enable = true; + nssmdns4 = true; + openFirewall = true; + }; + pipewire = { + enable = true; + alsa.enable = true; + alsa.support32Bit = true; + pulse.enable = true; + }; + # my modules + cli-environment.enable = true; + desktop-apps.enable = true; + dev-environment.enable = true; + gaming.enable = true; + fonts.enable = true; + window-manager.enable = true; }; users.users.yoru = { shell = pkgs.fish; isNormalUser = true; description = "Yoru"; - extraGroups = [ "networkmanager" "wheel" ]; + extraGroups = [ "networkmanager" "wheel" "scanner" "lp"]; packages = with pkgs; [ - + ]; }; home-manager = { @@ -94,16 +116,36 @@ }; }; nixpkgs.config.allowUnfree = true; - environment.systemPackages = with pkgs; [ - g15daemon - ]; - services.cli-environment.enable = true; - services.desktop-apps.enable = true; - services.dev-environment.enable = true; - services.gaming.enable = true; - services.fonts.enable = true; - services.window-manager.enable = true; + stylix = { + enable = true; + image = ../../wall.jpg; + polarity = "dark"; + opacity.terminal = 0.9; + cursor.package = pkgs.bibata-cursors; + cursor.name = "Bibata-Modern-Ice"; + cursor.size = 24; + fonts = { + monospace = { + package = pkgs.nerd-fonts.jetbrains-mono; + name = "JetBrainsMono Nerd Font Mono"; + }; + sansSerif = { + package = pkgs.montserrat; + name = "Montserrat"; + }; + serif = { + package = pkgs.montserrat; + name = "Montserrat"; + }; + sizes = { + applications = 12; + terminal = 12; + desktop = 11; + popups = 12; + }; + }; + }; system.stateVersion = "24.05"; } diff --git a/hosts/home/home.nix b/hosts/home/home.nix index ca9b5cb..b95ed1b 100644 --- a/hosts/home/home.nix +++ b/hosts/home/home.nix @@ -18,9 +18,91 @@ myHome.kitty.enable = true; myHome.shell.enable = true; - # TODO Move somewhere... - # programs.spotify-player.enable = true; + home.file.".config/swappy/config".text = '' + [Default] + save_dir=/home/yoru/Pictures/Screenshots + save_filename_format=swappy-%Y%m%d-%H%M%S.png + show_panel=false + line_size=5 + text_size=20 + text_font=Ubuntu + paint_mode=brush + early_exit=true + fill_shape=false + ''; - programs.home-manager.enable = true; + home.packages = [ + (import ../../scripts/screenshot.nix { inherit pkgs; }) + (import ../../scripts/rainbow-border.nix { inherit pkgs; }) + ]; + + # stylix.targets = { + # waybar.enable = false; + # rofi.enable = false; + # hyprland.enable = false; + # }; + + gtk = { + iconTheme = { + name = "Papirus-Dark"; + package = pkgs.papirus-icon-theme; + }; + gtk3.extraConfig = { + gtk-application-prefer-dark-theme = 1; + }; + gtk4.extraConfig = { + gtk-application-prefer-dark-theme = 1; + }; + }; + qt = { + enable = true; + style.name = "adwaita-dark"; + platformTheme.name = "gtk3"; + }; + + services = { + hypridle = { + settings = { + general = { + after_sleep_cmd = "hyprctl dispatch dpms on"; + ignore_dbus_inhibit = false; + lock_cmd = "hyprlock"; + }; + listener = [ + { + timeout = 900; + on-timeout = "hyprlock"; + } + { + timeout = 1200; + on-timeout = "hyprctl dispatch dpms off"; + on-resume = "hyprctl dispatch dpms on"; + } + ]; + }; + }; + }; + + programs = { + gh.enable = true; + btop = { + enable = true; + settings = { + vim_keys = true; + }; + }; + home-manager.enable = true; + hyprlock = { + enable = true; + settings = { + general = { + disable_loading_bar = true; + grace = 10; + hide_cursor = true; + no_fade_in = false; + }; + }; + }; + }; home.stateVersion = "23.11"; } diff --git a/modules/home-manager/helix.nix b/modules/home-manager/helix.nix index 7875e1e..71b4abc 100644 --- a/modules/home-manager/helix.nix +++ b/modules/home-manager/helix.nix @@ -31,7 +31,13 @@ in { # [language-server.pylsp.config.pylsp] # plugins.pyls_mypy.enabled = true # plugins.pyls_mypy.live_mode = true - + +# [[language]] +# name = "rust" +# language-servers = ["rust-analyzer"] + +# [language-server.rust-analyzer.config] +# check.command = "clippy" }; diff --git a/modules/home-manager/kitty.nix b/modules/home-manager/kitty.nix index 767e561..0e85b53 100644 --- a/modules/home-manager/kitty.nix +++ b/modules/home-manager/kitty.nix @@ -26,6 +26,12 @@ in { background_blur = 5; font_family = "Fira Code"; }; + extraConfig = '' + tab_bar_style fade + tab_fade 1 + active_tab_font_style bold + inactive_tab_font_style bold + ''; }; }; } diff --git a/modules/home-manager/shell.nix b/modules/home-manager/shell.nix index da34710..5fe8bfa 100644 --- a/modules/home-manager/shell.nix +++ b/modules/home-manager/shell.nix @@ -15,8 +15,18 @@ neofetch typst ]; + programs.direnv = { + enable = true; + }; programs.fish = { enable = true; + shellAliases = { + ls = "eza --icons"; + cat = "bat"; + ll = "eza -lh --icons --grid --group-directories-first"; + la = "eza -lah --icons --grid --group-directories-first"; + ".." = "cd .."; + }; }; }; } diff --git a/modules/home-manager/waybar.nix b/modules/home-manager/waybar.nix index a5e117a..edf6072 100644 --- a/modules/home-manager/waybar.nix +++ b/modules/home-manager/waybar.nix @@ -4,137 +4,7 @@ config, ... }: let - waybarConfig = { - "layer" = "top"; - "position" = "top"; - modules-left = [ - "hyprland/workspaces" - "custom/media" - ]; - modules-center = [ - "hyprland/window" - ]; - modules-right = [ - "mpd" - "idle_inhibitor" - "pulseaudio" - "network" - "power-profiles-daemon" - "cpu" - "memory" - "temperature" - # "backlight" - "keyboard-state" - "clock" - "tray" - "custom/power" - ]; - "hyprland/workspaces" = { - "format" = "{icon}"; - "on-scroll-up" = "hyprctl dispatch workspace e+1"; - "on-scroll-down" = "hyprctl dispatch workspace e-1"; - }; - "idle_inhibitor" = { - "format" = "{icon}"; - "format-icons" = { - "activated" = ""; - "deactivated" = ""; - }; - }; - "tray" = { - "spacing" = 10; - }; - "cpu" = { - "format" = "{usage}% "; - "tooltip" = false; - }; - "memory" = { - "format" = "{}% "; - }; - "temperature" = { - # // "thermal-zone" = 2; - # // "hwmon-path" = "/sys/class/hwmon/hwmon2/temp1_input"; - "critical-threshold" = 80; - # // "format-critical" = "{temperatureC}°C {icon}"; - "format" = "{temperatureC}°C {icon}"; - "format-icons" = ["" "" ""]; - }; - "network" = { - # // "interface" = "wlp2*"; // (Optional) To force the use of this interface - "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}"; - }; - "pulseaudio" = { - # // "scroll-step" = 1; // %, can be a float - "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"; - }; - "custom/media" = { - "format" = "{icon} {text}"; - "return-type" = "json"; - "max-length" = 40; - "format-icons" = { - "spotify" = ""; - "default" = "🎜"; - }; - "escape" = true; - "exec" = "$HOME/.config/waybar/mediaplayer.py 2> /dev/null"; # // Script in resources folder - # // "exec": "$HOME/.config/waybar/mediaplayer.py --player spotify 2> /dev/null" // Filter player based on name - }; - "custom/power" = { - "format" = "⏻ "; - "tooltip" = false; - "menu" = "on-click"; - "menu-file" = "$HOME/.config/waybar/power_menu.xml"; # // Menu file in resources folder - "menu-actions" = { - "shutdown" = "shutdown"; - "reboot" = "reboot"; - "suspend" = "systemctl suspend"; - "hibernate" = "systemctl hibernate"; - }; - }; - }; - - css = '' - * { - font-family: 'Fira Code', 'Symbols Nerd Font Mono'; - font-size: 16px; - min-height: 45px; - } - window#waybar { - background: transparent; - } - #workspaces, #clock, #pulseaudio, #network, #cpu, #memory, #backlight, #idle_inhibitor, #temperature, #custom-power { - border-radius: 10px; - background-color: rgba(10, 10, 10, 0.5); - margin-top: 1px; - padding-top: 5px; - padding-left: 15px; - padding-right: 10px; - padding-bottom: 5px; - } - #workspaces button.active { - color: #ebebeb; - } - ''; + betterTransition = "all 0.3s cubic-bezier(.55,-0.68,.48,1.682)"; in { options = { myHome.waybar.enable = lib.mkEnableOption "enables waybar"; @@ -143,14 +13,265 @@ in { config = lib.mkIf config.myHome.waybar.enable { programs.waybar = { enable = true; - systemd = { - enable = false; - target = "graphical-session.target"; - }; - style = css; - settings = { - mainBar = waybarConfig; - }; + package = pkgs.waybar; + # systemd = { + # enable = false; + # target = "graphical-session.target"; + # }; + settings = [ + { + layer = "top"; + position = "top"; + modules-center = [ "hyprland/workspaces" ]; + modules-left = [ + "custom/startmenu" + "hyprland/window" + "pulseaudio" + "cpu" + "memory" + "idle_inhibitor" + ]; + modules-right = [ + "custom/hyprbindings" + "custom/notification" + "custom/exit" + "battery" + "tray" + "clock" + ]; + "hyprland/workspaces" = { + format = "{name}"; + format-icons = { + default = " "; + active = " "; + urgent = " "; + }; + on-scroll-up = "hyprctl dispatch workspace e+1"; + on-scroll-down = "hyprctl dispatch workspace e-1"; + }; + "clock" = { + format = '' {:L%H:%M}''; + tooltip = true; + tooltip-format = "{:%A, %d.%B %Y }\n{calendar}"; + }; + "hyprland/window" = { + max-length = 22; + separate-outputs = false; + rewrite = { + "" = " 🙈 No Windows? "; + }; + }; + "memory" = { + interval = 5; + format = " {}%"; + tooltip = true; + }; + "cpu" = { + interval = 5; + format = " {usage:2}%"; + tooltip = true; + }; + "disk" = { + format = " {free}"; + tooltip = true; + }; + "network" = { + format-icons = [ + "󰤯" + "󰤟" + "󰤢" + "󰤥" + "󰤨" + ]; + format-ethernet = " {bandwidthDownOctets}"; + format-wifi = "{icon} {signalStrength}%"; + format-disconnected = "󰤮"; + tooltip = false; + }; + "tray" = { + spacing = 12; + }; + "pulseaudio" = { + format = "{icon} {volume}% {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 = "sleep 0.1 && pavucontrol"; + }; + "custom/exit" = { + tooltip = false; + format = ""; + on-click = "sleep 0.1 && wlogout"; + }; + "custom/startmenu" = { + tooltip = false; + format = ""; + # exec = "rofi -show drun"; + on-click = "sleep 0.1 && rofi-launcher"; + }; + "custom/hyprbindings" = { + tooltip = false; + format = "󱕴"; + on-click = "sleep 0.1 && list-hypr-bindings"; + }; + "idle_inhibitor" = { + format = "{icon}"; + format-icons = { + activated = ""; + deactivated = ""; + }; + tooltip = "true"; + }; + "custom/notification" = { + tooltip = false; + format = "{icon} {}"; + format-icons = { + notification = ""; + none = ""; + dnd-notification = ""; + dnd-none = ""; + inhibited-notification = ""; + inhibited-none = ""; + dnd-inhibited-notification = ""; + dnd-inhibited-none = ""; + }; + return-type = "json"; + exec-if = "which swaync-client"; + exec = "swaync-client -swb"; + on-click = "sleep 0.1 && task-waybar"; + escape = true; + }; + "battery" = { + states = { + warning = 30; + critical = 15; + }; + format = "{icon} {capacity}%"; + format-charging = "󰂄 {capacity}%"; + format-plugged = "󱘖 {capacity}%"; + format-icons = [ + "󰁺" + "󰁻" + "󰁼" + "󰁽" + "󰁾" + "󰁿" + "󰂀" + "󰂁" + "󰂂" + "󰁹" + ]; + on-click = ""; + tooltip = false; + }; + } + ]; + style = '' + * { + font-family: JetBrainsMono Nerd Font Mono; + font-size: 16px; + border-radius: 0px; + border: none; + min-height: 0px; + } + window#waybar { + background: rgba(0,0,0,0); + } + #workspaces { + color: #${config.stylix.base16Scheme.base00}; + background: #${config.stylix.base16Scheme.base01}; + margin: 4px 4px; + padding: 5px 5px; + border-radius: 16px; + } + #workspaces button { + font-weight: bold; + padding: 0px 5px; + margin: 0px 3px; + border-radius: 16px; + color: #${config.stylix.base16Scheme.base00}; + background: linear-gradient(45deg, #${config.stylix.base16Scheme.base08}, #${config.stylix.base16Scheme.base0D}); + opacity: 0.5; + transition: ${betterTransition}; + } + #workspaces button.active { + font-weight: bold; + padding: 0px 5px; + margin: 0px 3px; + border-radius: 16px; + color: #${config.stylix.base16Scheme.base00}; + background: linear-gradient(45deg, #${config.stylix.base16Scheme.base08}, #${config.stylix.base16Scheme.base0D}); + transition: ${betterTransition}; + opacity: 1.0; + min-width: 40px; + } + #workspaces button:hover { + font-weight: bold; + border-radius: 16px; + color: #${config.stylix.base16Scheme.base00}; + background: linear-gradient(45deg, #${config.stylix.base16Scheme.base08}, #${config.stylix.base16Scheme.base0D}); + opacity: 0.8; + transition: ${betterTransition}; + } + tooltip { + background: #${config.stylix.base16Scheme.base00}; + border: 1px solid #${config.stylix.base16Scheme.base08}; + border-radius: 12px; + } + tooltip label { + color: #${config.stylix.base16Scheme.base08}; + } + #window, #pulseaudio, #cpu, #memory, #idle_inhibitor { + font-weight: bold; + margin: 4px 0px; + margin-left: 7px; + padding: 0px 18px; + background: #${config.stylix.base16Scheme.base04}; + color: #${config.stylix.base16Scheme.base00}; + border-radius: 24px 10px 24px 10px; + } + #custom-startmenu { + color: #${config.stylix.base16Scheme.base0B}; + background: #${config.stylix.base16Scheme.base02}; + font-size: 28px; + margin: 0px; + padding: 0px 30px 0px 15px; + border-radius: 0px 0px 40px 0px; + } + #custom-hyprbindings, #network, #battery, + #custom-notification, #tray, #custom-exit { + font-weight: bold; + background: #${config.stylix.base16Scheme.base0F}; + color: #${config.stylix.base16Scheme.base00}; + margin: 4px 0px; + margin-right: 7px; + border-radius: 10px 24px 10px 24px; + padding: 0px 18px; + } + #clock { + font-weight: bold; + color: #0D0E15; + background: linear-gradient(90deg, #${config.stylix.base16Scheme.base0E}, #${config.stylix.base16Scheme.base0C}); + margin: 0px; + padding: 0px 15px 0px 30px; + border-radius: 0px 0px 0px 40px; + } + ''; }; }; } diff --git a/modules/nixos/cli-environment.nix b/modules/nixos/cli-environment.nix index 65ddfb0..81f49f1 100644 --- a/modules/nixos/cli-environment.nix +++ b/modules/nixos/cli-environment.nix @@ -12,10 +12,22 @@ in config = mkIf cfg.enable { environment.systemPackages = with pkgs; [ + vim wget + killall + htop unzip + unrar helix + direnv git + bat + tree + imv + eza # ? + appimage-run + nh + openssl ]; programs.fish.enable = true; }; diff --git a/modules/nixos/desktop-apps.nix b/modules/nixos/desktop-apps.nix index 01b787d..40afd09 100644 --- a/modules/nixos/desktop-apps.nix +++ b/modules/nixos/desktop-apps.nix @@ -20,8 +20,20 @@ in blender gimp eog + mpv + brightnessctl + spotify # cura ]; - programs.firefox.enable = true; + programs = { + firefox.enable = true; + thunar = { + enable = true; + plugins = with pkgs.xfce; [ + thunar-archive-plugin + thunar-volman + ]; + }; + }; }; } diff --git a/modules/nixos/window-manager.nix b/modules/nixos/window-manager.nix index 0ad3682..3e2bbe3 100644 --- a/modules/nixos/window-manager.nix +++ b/modules/nixos/window-manager.nix @@ -15,13 +15,36 @@ in programs.hyprlock.enable = true; security.pam.services.hyprlock = {}; environment.systemPackages = with pkgs; [ - wofi + # wofi dolphin waybar pavucontrol + libnotify swaynotificationcenter wl-clipboard hyprpaper + libnotify + hyprpicker + slurp + grim + swappy + swww + file-roller + rofi ]; + + xdg.portal = { + enable = true; + wlr.enable = true; + extraPortals = [ + pkgs.xdg-desktop-portal-gtk + pkgs.xdg-desktop-portal + ]; + configPackages = [ + pkgs.xdg-desktop-portal-gtk + pkgs.xdg-desktop-portal-hyprland + pkgs.xdg-desktop-portal + ]; + }; }; } diff --git a/scripts/rainbow-border.nix b/scripts/rainbow-border.nix new file mode 100644 index 0000000..d99d9ad --- /dev/null +++ b/scripts/rainbow-border.nix @@ -0,0 +1,15 @@ +{ pkgs }: + +pkgs.writeShellScriptBin "rainbow-border" '' +#!/bin/bash +# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ ## +# for rainbow borders animation + +function random_hex() { + random_hex=("0xff$(openssl rand -hex 3)") + echo $random_hex +} + +# rainbow colors only for active window +hyprctl keyword general:col.active_border $(random_hex) $(random_hex) $(random_hex) $(random_hex) $(random_hex) $(random_hex) $(random_hex) $(random_hex) $(random_hex) $(random_hex) 270deg +'' diff --git a/scripts/screenshot.nix b/scripts/screenshot.nix new file mode 100644 index 0000000..463ca3d --- /dev/null +++ b/scripts/screenshot.nix @@ -0,0 +1,5 @@ +{ pkgs }: + +pkgs.writeShellScriptBin "screenshot" '' + grim -g "$(slurp)" - | swappy -f - +'' diff --git a/wall.jpg b/wall.jpg new file mode 100644 index 0000000..ffa2dc9 Binary files /dev/null and b/wall.jpg differ