diff --git a/home-manager/default.nix b/home-manager/default.nix new file mode 100644 index 0000000..e69de29 diff --git a/home-manager/programs/ags/default.nix b/home-manager/programs/ags/default.nix new file mode 100644 index 0000000..d6dd04d --- /dev/null +++ b/home-manager/programs/ags/default.nix @@ -0,0 +1,39 @@ +{ config, lib, pkgs, inputs, ... }: { + + imports = [ inputs.ags.homeManagerModules.default ]; + + options.homeconfig.ags.enable = lib.options.mkOption { + type = lib.types.bool; + default = false; + }; + + config = lib.mkIf config.homeconfig.ags.enable { + programs.ags = { + enable = true; + + extraPackages = with pkgs; [ + gtksourceview + webkitgtk + accountsservice + ]; + }; + + home.file.".config/ags/launcher.js".text = /*javascript*/ '' + function Launcher() { + return Widget.EventBox({ + class_name: "launcher", + hpack: "center", + child: Widget.Icon({ + icon: '${pkgs.nixos-icons}/share/icons/hicolor/48x48/apps/nix-snowflake.png', + css: 'font-size: 24px;' + }), + on_primary_click: () => {Utils.execAsync('rofi -show drun')}, + margin_left: 10, + }) + } + + export default Launcher + ''; + + }; +} diff --git a/home-manager/programs/ags2/default.nix b/home-manager/programs/ags2/default.nix new file mode 100644 index 0000000..019c382 --- /dev/null +++ b/home-manager/programs/ags2/default.nix @@ -0,0 +1,12 @@ +{ config, lib, pkgs, ... }: { + + options.homeconfig.ags2.enable = lib.options.mkOption { + type = lib.types.bool; + default = false; + }; + + config = lib.mkIf config.homeconfig.ags2.enable { + + + }; +} diff --git a/home-manager/programs/calcurse/default.nix b/home-manager/programs/calcurse/default.nix new file mode 100644 index 0000000..b63913b --- /dev/null +++ b/home-manager/programs/calcurse/default.nix @@ -0,0 +1,14 @@ +{ config, lib, pkgs, ... }: { + + options.homeconfig.calcurse.enable = lib.options.mkOption { + type = lib.types.bool; + default = false; + }; + + config = lib.mkIf config.homeconfig.calcurse.enable { + home.packages = with pkgs; [ + calcurse + libnotify + ]; + }; +} diff --git a/home-manager/programs/default.nix b/home-manager/programs/default.nix new file mode 100644 index 0000000..bb06206 --- /dev/null +++ b/home-manager/programs/default.nix @@ -0,0 +1,24 @@ +{ config, lib, pkgs, inputs, ... }: { + + imports = [ + ./ags + ./git + ./nh + ./hyprland + ./terminal + ./rofi + ./pywal + ./swaylock + ./calcurse + ./firefox + ]; + + config = { + + home.packages = lib.mkIf (!config.homeconfig.wal.enable) [ + inputs.nixvim.packages.${pkgs.system}.default + ]; + + home.sessionVariables.EDITOR = "nvim"; + }; +} diff --git a/home-manager/programs/firefox/default.nix b/home-manager/programs/firefox/default.nix new file mode 100644 index 0000000..7367639 --- /dev/null +++ b/home-manager/programs/firefox/default.nix @@ -0,0 +1,59 @@ +{ config, lib, pkgs, inputs, ... }: { + + options.homeconfig.firefox.enable = lib.options.mkOption { + type = lib.types.bool; + default = false; + }; + + config = lib.mkIf config.homeconfig.firefox.enable { + + home.sessionVariables.BROWSER = "${config.programs.firefox.package}/bin/firefox"; + + home.packages = lib.mkIf config.homeconfig.wal.enable [ + pkgs.pywalfox-native + ]; + + home.file.".mozilla/native-messaging-hosts/pywalfox.json".text = let + pywalfox-wrapper = pkgs.writeShellScriptBin "pywalfox-wrapper" '' + ${pkgs.pywalfox-native}/bin/pywalfox start + ''; + in lib.replaceStrings [ "" ] [ + "${pywalfox-wrapper}/bin/pywalfox-wrapper" + ] (lib.readFile "${pkgs.pywalfox-native}/lib/python3.12/site-packages/pywalfox/assets/manifest.json"); + + + programs.firefox = { + + enable = true; + package = pkgs.firefox; + + profiles.nathan = { + search = { + default = "ddg"; + privateDefault = "ddg"; + }; + bookmarks = { + force = true; + settings = [ + { + name = "toolbar"; + toolbar = true; + bookmarks = [ + { + name = "NixOS Search - Packages"; + url = "https://search.nixos.org/packages"; + } + ]; + } + ]; + }; + + extensions.packages = with inputs.firefox-addons.packages.${pkgs.system}; [ + ublock-origin + keepassxc-browser + pywalfox + ]; + }; + }; + }; +} diff --git a/home-manager/programs/git/default.nix b/home-manager/programs/git/default.nix new file mode 100644 index 0000000..084481e --- /dev/null +++ b/home-manager/programs/git/default.nix @@ -0,0 +1,44 @@ +{ config, lib, ... }: { + + options.homeconfig.git.enable = lib.options.mkOption { + type = lib.types.bool; + default = false; + }; + + config = lib.mkIf config.homeconfig.git.enable { + + sops = { + secrets = { + "git/username" = {}; + "git/email" = {}; + }; + + templates.gitconfig.content = '' + [user] + name = "${config.sops.placeholder."git/username"}" + email = "${config.sops.placeholder."git/email"}" + ''; + }; + + programs.git = { + enable = true; + + includes = [ + { path = "${config.sops.templates.gitconfig.path}"; } + ]; + + extraConfig = { + init = { + defaultBranch = "master"; + }; + url = { + "ssh://gitea@gitea.blunkall.us/" = { + insteadOf = [ + "blunkall:" + ]; + }; + }; + }; + }; + }; +} diff --git a/home-manager/programs/hyprland/default.nix b/home-manager/programs/hyprland/default.nix new file mode 100644 index 0000000..99fea6b --- /dev/null +++ b/home-manager/programs/hyprland/default.nix @@ -0,0 +1,43 @@ +{ config, lib, pkgs, ... }: { + + options.homeconfig.hyprland.enable = lib.options.mkOption { + type = lib.types.bool; + default = false; + }; + + config = lib.mkIf config.homeconfig.hyprland.enable { + + home.sessionVariables.NIX_OZONE_WL = "1"; + + programs.kitty.enable = lib.mkDefault true; + + home.packages = with pkgs; [ + pyprland + ]; + + wayland.windowManager.hyprland = { + + enable = true; + + systemd = { + enable = true; + variables = [ "--all" ]; + }; + + extraConfig = let + monitor = if config.homeconfig.host == "laptop" then '' + monitor=eDP-1,1920x1080@60,0x0,1 + '' else if config.homeconfig.host == "homebox" then '' + monitor=HDMI-A-2,1920x1080@60,0x0,1 + monitor=HEADLESS-2,1920x1080@60,0x0,1 + exec-once=hyprctl output create headless HEADLESS-2 + exec-once=hyprctl keyword monitor HDMI-A-2,disable + exec-once=${pkgs.wayvnc}/bin/wayvnc 0.0.0.0 -o HEADLESS-2 + '' else ''''; + in monitor + '' + source = /home/nathan/.config/hypr/main.conf + ''; + + }; + }; +} diff --git a/home-manager/programs/nh/default.nix b/home-manager/programs/nh/default.nix new file mode 100644 index 0000000..30dd58d --- /dev/null +++ b/home-manager/programs/nh/default.nix @@ -0,0 +1,21 @@ +{ config, lib, ... }: { + + options.homeconfig.nh.enable = lib.options.mkOption { + type = lib.types.bool; + default = false; + }; + + config = lib.mkIf config.homeconfig.nh.enable { + + programs.nh = { + enable = true; + flake = "${config.home.homeDirectory}/Projects/Olympus"; + + clean = { + enable = true; + dates = "weekly"; + extraArgs = "--keep 5 --keep-since 5d"; + }; + }; + }; +} diff --git a/home-manager/programs/pywal/default.nix b/home-manager/programs/pywal/default.nix new file mode 100644 index 0000000..6227aa4 --- /dev/null +++ b/home-manager/programs/pywal/default.nix @@ -0,0 +1,23 @@ +{ config, lib, pkgs, inputs, ... }: { + + options.homeconfig.wal.enable = lib.options.mkOption { + type = lib.types.bool; + default = false; + }; + + config = lib.mkIf config.homeconfig.wal.enable { + + home.packages = with pkgs; [ + + inputs.themecord.packages.${pkgs.system}.default + vesktop + + inputs.nixvim.packages.${pkgs.system}.pywal + + pywal16 + imagemagick + ]; + + + }; +} diff --git a/home-manager/programs/rofi/default.nix b/home-manager/programs/rofi/default.nix new file mode 100644 index 0000000..34814e9 --- /dev/null +++ b/home-manager/programs/rofi/default.nix @@ -0,0 +1,20 @@ +{ config, lib, pkgs, ... }: { + + options.homeconfig.rofi.enable = lib.options.mkOption { + type = lib.types.bool; + default = false; + }; + + config = lib.mkIf config.homeconfig.rofi.enable { + programs.rofi = { + + enable = true; + package = pkgs.rofi-wayland; + + cycle = true; + + theme = "/home/nathan/.cache/wal/colors-rofi-dark.rasi"; + }; + }; +} + diff --git a/home-manager/programs/swaylock/default.nix b/home-manager/programs/swaylock/default.nix new file mode 100644 index 0000000..d2841fb --- /dev/null +++ b/home-manager/programs/swaylock/default.nix @@ -0,0 +1,12 @@ +{ config, lib, pkgs, ... }: { + + options.homeconfig.swaylock.enable = lib.options.mkOption { + type = lib.types.bool; + default = false; + }; + + config = lib.mkIf config.homeconfig.swaylock.enable { + + home.packages = with pkgs; [ swaylock-effects ]; + }; +} diff --git a/home-manager/programs/terminal/bat/default.nix b/home-manager/programs/terminal/bat/default.nix new file mode 100644 index 0000000..2c1f101 --- /dev/null +++ b/home-manager/programs/terminal/bat/default.nix @@ -0,0 +1,18 @@ +{ config, lib, pkgs, ... }: { + + programs.bat = { + + enable = true; + + extraPackages = with pkgs.bat-extras; [ + batman + batpipe + batgrep + batdiff + batwatch + prettybat + ]; + + + }; +} diff --git a/home-manager/programs/terminal/default.nix b/home-manager/programs/terminal/default.nix new file mode 100644 index 0000000..52de2fc --- /dev/null +++ b/home-manager/programs/terminal/default.nix @@ -0,0 +1,12 @@ +{ ... }: { + + imports = [ + ./bat + ./eza + ./fzf + ./tmux + ./kitty + ./zoxide + ./zsh + ]; +} diff --git a/home-manager/programs/terminal/eza/default.nix b/home-manager/programs/terminal/eza/default.nix new file mode 100644 index 0000000..3f6d4a9 --- /dev/null +++ b/home-manager/programs/terminal/eza/default.nix @@ -0,0 +1,17 @@ +{ config, lib, pkgs, ... }: { + + programs.eza = { + + enable = true; + + enableZshIntegration = true; + + extraOptions = [ + "--color=auto" + ]; + + git = true; + + icons = "auto"; + }; +} diff --git a/home-manager/programs/terminal/fzf/default.nix b/home-manager/programs/terminal/fzf/default.nix new file mode 100644 index 0000000..b9b7e6a --- /dev/null +++ b/home-manager/programs/terminal/fzf/default.nix @@ -0,0 +1,15 @@ +{ config, lib, pkgs, ... }: { + + programs.fzf = { + + enable = true; + + enableZshIntegration = true; + + tmux = { + #enableShellIntegration = true; + + #shellIntegrationOptions = []; + }; + }; +} diff --git a/home-manager/programs/terminal/kitty/default.nix b/home-manager/programs/terminal/kitty/default.nix new file mode 100644 index 0000000..ce01540 --- /dev/null +++ b/home-manager/programs/terminal/kitty/default.nix @@ -0,0 +1,33 @@ +{ config, lib, pkgs, ... }: { + + programs.kitty = { + + enable = true; + + font = { + name = "FiraCode Nerd Font"; + size = 12; + }; + + extraConfig = '' + +confirm_os_window_close 0 + +include ${config.home.homeDirectory}/.cache/wal/colors-kitty.conf + +disable_ligatures never + +dynamic_background_opacity yes + +tab_bar_edge top + +map ctrl+shift+t new_tab +map ctrl+shift+w close_tab + +map ctrl+tab next_tab +map ctrl+shift+tab previous_tab + + ''; + }; +} + diff --git a/home-manager/programs/terminal/tmux/default.nix b/home-manager/programs/terminal/tmux/default.nix new file mode 100644 index 0000000..62d73f7 --- /dev/null +++ b/home-manager/programs/terminal/tmux/default.nix @@ -0,0 +1,23 @@ +{ config, lib, pkgs, ... }: { + + programs.tmux = { + + enable = true; + + clock24 = true; + + mouse = true; + + baseIndex = 1; + + keyMode = "vi"; + + prefix = "C-b"; + + shell = "${pkgs.zsh}/bin/zsh"; + + }; + +} + + diff --git a/home-manager/programs/terminal/zoxide/default.nix b/home-manager/programs/terminal/zoxide/default.nix new file mode 100644 index 0000000..afbf058 --- /dev/null +++ b/home-manager/programs/terminal/zoxide/default.nix @@ -0,0 +1,13 @@ +{ config, lib, pkgs, ... }: { + + programs.zoxide = { + + enable = true; + + enableZshIntegration = true; + + options = [ + "--cmd cd" + ]; + }; +} diff --git a/home-manager/programs/terminal/zsh/default.nix b/home-manager/programs/terminal/zsh/default.nix new file mode 100644 index 0000000..a0157e3 --- /dev/null +++ b/home-manager/programs/terminal/zsh/default.nix @@ -0,0 +1,158 @@ +{ config, lib, pkgs, ... }: { + + home.packages = with pkgs; [ + oh-my-posh + ]; + + programs.zsh = { + + enable = true; + + enableCompletion = true; + + autosuggestion.enable = true; + + syntaxHighlighting.enable = true; + + shellAliases = { + ls = "eza"; + ll = "ls -l"; + + ksh = "kitten ssh"; + + vi = "nvim"; + vim = "nvim"; + + }; + + history = { + size = 5000; + ignoreAllDups = true; + ignoreSpace = true; + share = true; + }; + + initContent = if config.homeconfig.wal.enable then (lib.mkBefore '' + cat ${config.home.homeDirectory}/.cache/wal/sequences + eval "$(oh-my-posh init zsh --config ${config.home.homeDirectory}/.cache/wal/ohmyposh.toml)" + '') else (lib.mkBefore '' + eval "$(oh-my-posh init zsh --config ${config.home.homeDirectory}/.config/zsh/ohmyposh.toml)" + ''); + + }; + + home.file.".config/wal/templates/ohmyposh.toml".text = '' +#:schema https://raw.githubusercontent.com/JanDeDobbeleer/oh-my-posh/main/themes/schema.json + +version = 2 +final_space = true +console_title_template = '{{{{ .Shell }}}} in {{{{ .Folder }}}}' + +[[blocks]] + type = 'prompt' + alignment = 'left' + newline = true + + [[blocks.segments]] + type = 'os' + style = 'diamond' + trailing_diamond = '' + background = 'p:c1' + foreground = 'p:c12' + template = ' {{{{ .Icon }}}} ' + + [[blocks.segments]] + type = 'session' + style = 'diamond' + trailing_diamond = '' + background = 'p:c2' + foreground = 'p:c14' + template = '{{{{ .UserName }}}}@{{{{ .HostName }}}}' + + [[blocks.segments]] + type = 'path' + style = 'diamond' + trailing_diamond = '' + background = 'p:c4' + foreground = 'p:c13' + template = '{{{{ .Path }}}}' + + [blocks.segments.properties] + style = 'full' + +[[blocks]] + type = 'prompt' + overflow = 'hidden' + alignment = 'right' + + [[blocks.segments]] + type = 'executiontime' + style = 'diamond' + leading_diamond = '' + background = 'p:c4' + foreground = 'p:c13' + template = '{{{{ .FormattedMs }}}}' + + [[blocks.segments]] + type = 'time' + style = 'diamond' + leading_diamond = '' + background = 'p:c2' + foreground = 'p:c14' + + [[blocks.segments]] + type = 'shell' + style = 'diamond' + leading_diamond = '' + background = 'p:c1' + foreground = 'p:c12' + +[[blocks]] + type = 'prompt' + alignment = 'left' + newline = true + + [[blocks.segments]] + type = 'text' + style = 'plain' + background = 'transparent' + foreground_templates = [ + "{{{{ if gt .Code 0 }}}}p:c13{{{{end}}}}", + "{{{{ if eq .Code 0 }}}}p:c14{{{{end}}}}", + ] + template = "{{{{ if gt .Code 0 }}}}!❭ {{{{else}}}}❭ {{{{end}}}}" + +[transient_prompt] + foreground_templates = [ + "{{{{ if gt .Code 0 }}}}p:c13{{{{end}}}}", + "{{{{ if eq .Code 0 }}}}p:c14{{{{end}}}}", + ] + background = 'transparent' + template = "{{{{ if gt .Code 0 }}}}!❭ {{{{else}}}}❭ {{{{end}}}}" + +[secondary_prompt] + background = 'transparent' + forground = 'p:c14' + template = "❭❭ " + + +[palette] + +c0 = "{color0}" +c1 = "{color1}" +c2 = "{color2}" +c3 = "{color3}" +c4 = "{color4}" +c5 = "{color5}" +c6 = "{color6}" +c7 = "{color7}" +c8 = "{color8}" +c9 = "{color9}" +c10 = "{color10}" +c11 = "{color11}" +c12 = "{color12}" +c13 = "{color13}" +c14 = "{color14}" +c15 = "{color15}" + ''; +} diff --git a/home-manager/services/custom/default.nix b/home-manager/services/custom/default.nix new file mode 100644 index 0000000..92e1d82 --- /dev/null +++ b/home-manager/services/custom/default.nix @@ -0,0 +1 @@ +{}: {} diff --git a/home-manager/services/default.nix b/home-manager/services/default.nix new file mode 100644 index 0000000..4ebe959 --- /dev/null +++ b/home-manager/services/default.nix @@ -0,0 +1,6 @@ +{ ... }: { + imports = [ + ./mpd + ./wayvnc + ]; +} diff --git a/home-manager/services/mpd/default.nix b/home-manager/services/mpd/default.nix new file mode 100644 index 0000000..cc5f70b --- /dev/null +++ b/home-manager/services/mpd/default.nix @@ -0,0 +1,41 @@ +{ config, lib, pkgs, ... }: { + + options = { + homeconfig.mpd.enable = lib.options.mkOption { + type = lib.types.bool; + default = false; + }; + }; + + config = lib.mkIf config.homeconfig.mpd.enable { + services.mpd = { + enable = true; + network.startWhenNeeded = true; + network.port = 6600; + network.listenAddress = "127.0.0.1"; + musicDirectory = "/home/nathan/Music"; + extraConfig = '' + audio_output { + type "pipewire" + name "Audio1" + } + audio_output { + type "fifo" + name "visualizer" + path "/tmp/mpd.fifo" + format "44100:16:1" + } + ''; + }; + + services.mpdris2 = { + enable = true; + mpd.host = "127.0.0.1"; + mpd.port = 6600; + package = pkgs.mpdris2; + mpd.musicDirectory = "/home/nathan/Music"; + notifications = true; + }; + }; + +} diff --git a/home-manager/services/wayvnc/default.nix b/home-manager/services/wayvnc/default.nix new file mode 100644 index 0000000..6755e50 --- /dev/null +++ b/home-manager/services/wayvnc/default.nix @@ -0,0 +1,36 @@ +{ config, lib, pkgs, inputs, ... }: { + + options.homeconfig.wayvnc.enable = lib.options.mkOption { + type = lib.types.bool; + default = false; + }; + + disabledModules = [ + ]; + + imports = [ + (import "${inputs.home-manager-us}/modules/services/wayvnc.nix" { + inherit config; + inherit lib; + pkgs = (import inputs.nixpkgs-us { system = "x86_64-linux"; }); + }) + ]; + + config = lib.mkIf config.homeconfig.wayvnc.enable { + home.packages = with pkgs; [ + novnc + ]; + + services.wayvnc = { + enable = true; + + autoStart = true; + + settings = { + address = "0.0.0.0"; + + port = 5900; + }; + }; + }; +} diff --git a/home-manager/users/nathan/default.nix b/home-manager/users/nathan/default.nix new file mode 100644 index 0000000..f4076c0 --- /dev/null +++ b/home-manager/users/nathan/default.nix @@ -0,0 +1,58 @@ +{ config, lib, pkgs, ... }: { + + imports = [ + ./programs + ./services + ./packages + ./dotfiles + ]; + + options.homeconfig = { + host = lib.options.mkOption { + type = lib.types.str; + default = null; + }; + + home-manager.enable = lib.options.mkOption { + type = lib.types.bool; + default = false; + }; + }; + + config = { + + home.stateVersion = "23.11"; + + home.username = "nathan"; + + home.homeDirectory = "/home/nathan"; + + home.pointerCursor = { + gtk.enable = true; + package = pkgs.bibata-cursors; + name = "Bibata-Modern-Classic"; + size = 16; + }; + + gtk = { + enable = true; + theme.name = "Tokyonight-Dark"; + theme.package = pkgs.tokyonight-gtk-theme; + iconTheme.package = pkgs.rose-pine-icon-theme; + iconTheme.name = "rose-pine-moon"; + }; + + sops = { + age.keyFile = "/home/nathan/.config/sops/age/keys.txt"; + defaultSopsFile = ./secrets.yaml; + defaultSopsFormat = "yaml"; + }; + + services.mpris-proxy.enable = true; + + programs.ssh.enable = true; + + programs.home-manager.enable = config.homeconfig.home-manager.enable; + + }; +} diff --git a/home-manager/users/nathan/dotfiles/Wallpaper/Tron.jpg b/home-manager/users/nathan/dotfiles/Wallpaper/Tron.jpg new file mode 100644 index 0000000..c3c31dd Binary files /dev/null and b/home-manager/users/nathan/dotfiles/Wallpaper/Tron.jpg differ diff --git a/home-manager/users/nathan/dotfiles/Wallpaper/bluescape.jpg b/home-manager/users/nathan/dotfiles/Wallpaper/bluescape.jpg new file mode 100644 index 0000000..e55732d Binary files /dev/null and b/home-manager/users/nathan/dotfiles/Wallpaper/bluescape.jpg differ diff --git a/home-manager/users/nathan/dotfiles/Wallpaper/galaxy.jpg b/home-manager/users/nathan/dotfiles/Wallpaper/galaxy.jpg new file mode 100755 index 0000000..a2771c3 Binary files /dev/null and b/home-manager/users/nathan/dotfiles/Wallpaper/galaxy.jpg differ diff --git a/home-manager/users/nathan/dotfiles/Wallpaper/kurisu.gif b/home-manager/users/nathan/dotfiles/Wallpaper/kurisu.gif new file mode 100644 index 0000000..6b19557 Binary files /dev/null and b/home-manager/users/nathan/dotfiles/Wallpaper/kurisu.gif differ diff --git a/home-manager/users/nathan/dotfiles/Wallpaper/kurisu.jpg b/home-manager/users/nathan/dotfiles/Wallpaper/kurisu.jpg new file mode 100644 index 0000000..3149f64 Binary files /dev/null and b/home-manager/users/nathan/dotfiles/Wallpaper/kurisu.jpg differ diff --git a/home-manager/users/nathan/dotfiles/Wallpaper/llenn.png b/home-manager/users/nathan/dotfiles/Wallpaper/llenn.png new file mode 100644 index 0000000..5f7c800 Binary files /dev/null and b/home-manager/users/nathan/dotfiles/Wallpaper/llenn.png differ diff --git a/home-manager/users/nathan/dotfiles/Wallpaper/megumin.png b/home-manager/users/nathan/dotfiles/Wallpaper/megumin.png new file mode 100644 index 0000000..b616d1d Binary files /dev/null and b/home-manager/users/nathan/dotfiles/Wallpaper/megumin.png differ diff --git a/home-manager/users/nathan/dotfiles/Wallpaper/megumin1.gif b/home-manager/users/nathan/dotfiles/Wallpaper/megumin1.gif new file mode 100644 index 0000000..f733c6d Binary files /dev/null and b/home-manager/users/nathan/dotfiles/Wallpaper/megumin1.gif differ diff --git a/home-manager/users/nathan/dotfiles/Wallpaper/megumin2.gif b/home-manager/users/nathan/dotfiles/Wallpaper/megumin2.gif new file mode 100644 index 0000000..d7b790a Binary files /dev/null and b/home-manager/users/nathan/dotfiles/Wallpaper/megumin2.gif differ diff --git a/home-manager/users/nathan/dotfiles/Wallpaper/ngnl.jpg b/home-manager/users/nathan/dotfiles/Wallpaper/ngnl.jpg new file mode 100644 index 0000000..6091d86 Binary files /dev/null and b/home-manager/users/nathan/dotfiles/Wallpaper/ngnl.jpg differ diff --git a/home-manager/users/nathan/dotfiles/Wallpaper/orangescape.jpg b/home-manager/users/nathan/dotfiles/Wallpaper/orangescape.jpg new file mode 100644 index 0000000..c107dfa Binary files /dev/null and b/home-manager/users/nathan/dotfiles/Wallpaper/orangescape.jpg differ diff --git a/home-manager/users/nathan/dotfiles/Wallpaper/rezero.gif b/home-manager/users/nathan/dotfiles/Wallpaper/rezero.gif new file mode 100644 index 0000000..04e0ec9 Binary files /dev/null and b/home-manager/users/nathan/dotfiles/Wallpaper/rezero.gif differ diff --git a/home-manager/users/nathan/dotfiles/Wallpaper/sao.gif b/home-manager/users/nathan/dotfiles/Wallpaper/sao.gif new file mode 100644 index 0000000..2e4bf6f Binary files /dev/null and b/home-manager/users/nathan/dotfiles/Wallpaper/sao.gif differ diff --git a/home-manager/users/nathan/dotfiles/Wallpaper/sao.png b/home-manager/users/nathan/dotfiles/Wallpaper/sao.png new file mode 100644 index 0000000..b282367 Binary files /dev/null and b/home-manager/users/nathan/dotfiles/Wallpaper/sao.png differ diff --git a/home-manager/users/nathan/dotfiles/Wallpaper/sinon.gif b/home-manager/users/nathan/dotfiles/Wallpaper/sinon.gif new file mode 100644 index 0000000..c7a52c9 Binary files /dev/null and b/home-manager/users/nathan/dotfiles/Wallpaper/sinon.gif differ diff --git a/home-manager/users/nathan/dotfiles/ags/README.md b/home-manager/users/nathan/dotfiles/ags/README.md new file mode 100755 index 0000000..ed56012 --- /dev/null +++ b/home-manager/users/nathan/dotfiles/ags/README.md @@ -0,0 +1,15 @@ + +# Starter Config + +if suggestions don't work, first make sure +you have TypeScript LSP working in your editor + +if you do not want typechecking only suggestions + +```json +// tsconfig.json +"checkJs": false +``` + +types are symlinked to: +/home/nathan/.nix-profile/share/com.github.Aylur.ags/types diff --git a/home-manager/users/nathan/dotfiles/ags/bluetooth.js b/home-manager/users/nathan/dotfiles/ags/bluetooth.js new file mode 100755 index 0000000..3158673 --- /dev/null +++ b/home-manager/users/nathan/dotfiles/ags/bluetooth.js @@ -0,0 +1,34 @@ +const bluetooth = await Service.import("bluetooth") + + +export function ConnectedList() { + return Widget.Box({ + class_name: "btdevices", + setup: self => self.hook(bluetooth, self => { + self.children = bluetooth.connected_devices + .map(({ address, icon_name, name }) => Widget.EventBox({ + child: Widget.Icon(icon_name + '-symbolic'), + tooltip_text: name, + on_primary_click: () => { + bluetooth.getDevice(address).setConnection(false) + }, + })); + + self.visible = bluetooth.connected_devices.length > 0; + }, 'notify::connected-devices'), + }) +} + + +export default function Bluetooth() { + + + + return Widget.EventBox({ + tooltip_text: bluetooth.bind('enabled').as(on => on ? 'Enabled' : 'Disabled'), + child: Widget.Icon({ + icon: bluetooth.bind('enabled').as(on => + `bluetooth-${on ? 'active' : 'disabled'}-symbolic`), + }) + }) +} diff --git a/home-manager/users/nathan/dotfiles/ags/brightness.js b/home-manager/users/nathan/dotfiles/ags/brightness.js new file mode 100755 index 0000000..e69de29 diff --git a/home-manager/users/nathan/dotfiles/ags/clock.js b/home-manager/users/nathan/dotfiles/ags/clock.js new file mode 100755 index 0000000..c2904ca --- /dev/null +++ b/home-manager/users/nathan/dotfiles/ags/clock.js @@ -0,0 +1,14 @@ + + +const date = Variable("", { + poll: [1000, 'date "+%H:%M %b %e."'], +}) + +function Clock() { + return Widget.Label({ + class_name: "clock", + label: date.bind(), + }) +} + +export default Clock \ No newline at end of file diff --git a/home-manager/users/nathan/dotfiles/ags/config.js b/home-manager/users/nathan/dotfiles/ags/config.js new file mode 100755 index 0000000..2e754e4 --- /dev/null +++ b/home-manager/users/nathan/dotfiles/ags/config.js @@ -0,0 +1,132 @@ + +const hyprland = await Service.import("hyprland") +//const systemtray = await Service.import("systemtray") + +import Clock from './clock.js' +import Launcher from './launcher.js' +import Media from './media.js' +import Notification from './notif.js' +import Power from './power.js' +import Workspaces from './workspaces.js' +import Settings, {SettingsWindow} from './settings.js' +import { ConnectedList } from './bluetooth.js' + +import { NotificationPopups } from './notification.js' + + +// widgets can be only assigned as a child in one container +// so to make a reuseable widget, make it a function +// then you can simply instantiate one by calling it + + + +////////////////////////////////////////////////////////////// +// layout of the bar +function Left() { + return Widget.Box({ + spacing: 8, + margin_bottom: 5, + children: [ + Launcher(), + Workspaces(), + ], + }) +} + +function Center() { + return Widget.Box({ + spacing: 8, + margin_bottom: 5, + children: [ + Media(), + Clock(), + Notification(), + ], + }) +} + +function Right() { + return Widget.Box({ + hpack: "end", + spacing: 8, + margin_bottom: 5, + children: [ + ConnectedList(), + Settings(), + Power(), + ], + }) +} + +/////////////////////////////////////////////////////////// +//windows + +function Bar(monitor = 0) { + return Widget.Window({ + name: `bar-${monitor}`, // name has to be unique + class_name: "bar", + monitor, + anchor: ["top", "left", "right"], + height_request: 32, + vexpand: false, + exclusivity: "exclusive", + child: Widget.CenterBox({ + start_widget: Left(), + center_widget: Center(), + end_widget: Right(), + }), + }) +} + + + +function pickMonitor() { + + let n = 0 + + for(let i = 0; i < hyprland.monitors.length; i++) { + print(hyprland.getMonitor(i).name) + if(hyprland.getMonitor(i).name == 'eDP-1') + n = i + break + } + + return n; +} + +//////////////////////////////////////////////////////////// +//App config + +let m = 0 + +App.config({ + style: "/home/nathan/.cache/wal/colors-ags.css", + windows: [ + Bar(m), + SettingsWindow(m), + NotificationPopups(m) + // you can call it, for each monitor + // Bar(0), + // Bar(1) + ], +}) + +App.toggleWindow(App.windows[1].name) + +// Utils.timeout(100, () => Utils.notify({ +// summary: "Notification Popup Example", +// iconName: "info-symbolic", +// body: "Lorem ipsum dolor sit amet, qui minim labore adipisicing " +// + "minim sint cillum sint consectetur cupidatat.", +// actions: { +// "Cool": () => print("pressed Cool"), +// }, +// })) + +Utils.monitorFile(`/home/nathan/.cache/wal`, () => { + const css = `/home/nathan/.cache/wal/colors-ags.css` + App.resetCss() + App.applyCss(css) +}) + +export { } diff --git a/home-manager/users/nathan/dotfiles/ags/media.js b/home-manager/users/nathan/dotfiles/ags/media.js new file mode 100755 index 0000000..48a0771 --- /dev/null +++ b/home-manager/users/nathan/dotfiles/ags/media.js @@ -0,0 +1,141 @@ +const mpris = await Service.import("mpris") + + +export default function Media() { + const track = Utils.watch("", mpris, "player-changed", () => { + if (mpris.players[0]) { + const { track_artists, track_title } = mpris.players[0] + return `${track_artists.join(", ")} -${track_title}` + } else { + return "Nothing is playing" + } + }) + + return Widget.EventBox({ + class_name: "media", + on_primary_click: () => mpris.getPlayer("")?.playPause(), + on_scroll_up: () => mpris.getPlayer("")?.next(), + on_scroll_down: () => mpris.getPlayer("")?.previous(), + child: Widget.Icon({icon: 'emblem-music-symbolic'}), + }) +} + +function PlayerImg(player) { + return Widget.Box({ + hpack: "start", + width_request: 80, + height_request: 80, + css: player.bind("track_cover_url").transform(p => ` + background-image: url('${p || player.cover_path || '/home/nathan/Pictures/symbols/audio.png'}'); + background-size: contain; + background-repeat: no-repeat; + background-position: center; + `), + }) + +} + + +function PlayerGUI(player) { + + + return Widget.Box({ + class_name: "playerbox", + height_request: 200, + vexpand: false, + vertical: true, + children: [ + Widget.Box({ + vertical: false, + margin: 15, + hpack: "start", + spacing: 20, + children: [ + PlayerImg(player), + Widget.Box({ + vertical: true, + children: [ + Widget.Label({ + hpack: "start", + max_width_chars: 30, + truncate: "end", + label: player.bind('track-title').as(t => t) + }), + Widget.Label({ + hpack: "start", + max_width_chars: 30, + truncate: "end", + label: player.bind("track_artists").transform(a => a.join(", ")), + wrap: true, + }), + Widget.Label({ + hpack: "start", + max_width_chars: 30, + truncate: "end", + label: player.bind('track-album').as(t => t) + }), + ] + }) + ], + + }), + + Widget.Slider({ + class_name: "position", + draw_value: false, + on_change: ({ value }) => player.position = value * player.length, + visible: player.bind("length").as(l => l > 0), + setup: self => { + function update() { + const value = player.position / player.length + self.value = value > 0 ? value : 0 + } + self.hook(player, update) + self.hook(player, update, "position") + self.poll(1000, update) + }, + }), + + Widget.Box({ + vertical: false, + hpack: "center", + spacing: 20, + children: [ + Widget.Button({ + child: Widget.Icon({ icon: 'media-skip-backward-symbolic'}), + on_primary_click: () => player.previous() + }), + Widget.Button({ + child: Widget.Icon({ icon: player.bind("play_back_status").transform(s => { + switch (s) { + case "Playing": return 'media-playback-pause-symbolic' + case "Paused": + case "Stopped": return 'media-playback-start-symbolic' + } + }), + }), + on_primary_click: () => player.playPause(), + }), + Widget.Button({ + child: Widget.Icon({ icon: 'media-skip-forward-symbolic'}), + on_primary_click: () => player.next() + }) + ] + }) + ], + setup: self => { + + }, + }) +} + +export function Players() { + + const plrs = mpris.bind('players') + .as(p => p.map((v) => PlayerGUI(v))) + + return Widget.Box({ + vertical: true, + children: plrs, + }) +} diff --git a/home-manager/users/nathan/dotfiles/ags/notif.js b/home-manager/users/nathan/dotfiles/ags/notif.js new file mode 100755 index 0000000..e3134f2 --- /dev/null +++ b/home-manager/users/nathan/dotfiles/ags/notif.js @@ -0,0 +1,22 @@ +const notifications = await Service.import("notifications") + + + +// we don't need dunst or any other notification daemon +// because the Notifications module is a notification daemon itself +export default function Notification() { + const popups = notifications.bind("popups") + return Widget.EventBox({ + class_name: "notificationbutton", + visible: true, + on_primary_click: () => {}, + child: Widget.Icon({ + icon: "preferences-system-notifications-symbolic", + }), + + }) +} + +// Widget.Label({ +// label: popups.as(p => p[0]?.summary || ""), +// }), diff --git a/home-manager/users/nathan/dotfiles/ags/notification.js b/home-manager/users/nathan/dotfiles/ags/notification.js new file mode 100755 index 0000000..2971403 --- /dev/null +++ b/home-manager/users/nathan/dotfiles/ags/notification.js @@ -0,0 +1,131 @@ +const notifications = await Service.import("notifications") + +/** @param {import('resource:///com/github/Aylur/ags/service/notifications.js').Notification} n */ +function NotificationIcon({ app_entry, app_icon, image }) { + if (image) { + return Widget.Box({ + css: `background-image: url("${image}");` + + "background-size: contain;" + + "background-repeat: no-repeat;" + + "background-position: center;", + }) + } + + let icon = "dialog-information-symbolic" + if (Utils.lookUpIcon(app_icon)) + icon = app_icon + + if (app_entry && Utils.lookUpIcon(app_entry)) + icon = app_entry + + return Widget.Box({ + child: Widget.Icon(icon), + }) +} + +/** @param {import('resource:///com/github/Aylur/ags/service/notifications.js').Notification} n */ +function Notification(n) { + const icon = Widget.Box({ + vpack: "start", + class_name: "icon", + child: NotificationIcon(n), + }) + + const title = Widget.Label({ + class_name: "title", + xalign: 0, + justification: "left", + hexpand: true, + max_width_chars: 24, + truncate: "end", + wrap: true, + label: n.summary, + use_markup: true, + }) + + const body = Widget.Label({ + class_name: "body", + hexpand: true, + use_markup: true, + xalign: 0, + justification: "left", + label: n.body, + wrap: true, + }) + + const actions = Widget.Box({ + class_name: "actions", + children: n.actions.map(({ id, label }) => Widget.Button({ + class_name: "action-button", + on_clicked: () => { + n.invoke(id) + n.dismiss() + }, + hexpand: true, + child: Widget.Label(label), + })), + }) + + return Widget.EventBox( + { + attribute: { id: n.id }, + on_primary_click: n.dismiss, + }, + Widget.Box( + { + class_name: `notification ${n.urgency}`, + vertical: true, + }, + Widget.Box([ + icon, + Widget.Box( + { vertical: true }, + title, + body, + ), + ]), + actions, + ), + ) +} + +export function NotificationPopups(monitor = 0) { + const list = Widget.Box({ + vertical: true, + children: notifications.popups.map(Notification), + }) + + function onNotified(_, /** @type {number} */ id) { + const n = notifications.getNotification(id) + if (n) + list.children = [Notification(n), ...list.children] + } + + function onDismissed(_, /** @type {number} */ id) { + list.children.find(n => n.attribute.id === id)?.destroy() + } + + list.hook(notifications, onNotified, "notified") + .hook(notifications, onDismissed, "dismissed") + + return Widget.Window({ + monitor, + name: `notifications${monitor}`, + class_name: "notification-popups", + anchor: ["top", "right"], + layer: "overlay", + child: Widget.Box({ + css: "min-width: 2px; min-height: 2px;", + class_name: "notifications", + vertical: true, + child: list, + + /** this is a simple one liner that could be used instead of + hooking into the 'notified' and 'dismissed' signals. + but its not very optimized becuase it will recreate + the whole list everytime a notification is added or dismissed */ + // children: notifications.bind('popups') + // .as(popups => popups.map(Notification)) + }), + }) +} \ No newline at end of file diff --git a/home-manager/users/nathan/dotfiles/ags/power.js b/home-manager/users/nathan/dotfiles/ags/power.js new file mode 100755 index 0000000..9b08d00 --- /dev/null +++ b/home-manager/users/nathan/dotfiles/ags/power.js @@ -0,0 +1,44 @@ + + + +function Power() { + + + return Widget.Box({ + vertical: false, + spacing: 8, + children: [ + Widget.EventBox({ + child: Widget.Icon({icon: 'system-reboot-symbolic'}), + margin_right: 10, + class_name: 'restart', + tooltip_text: 'restart', + on_primary_click: () => {App.Quit(); Utils.execAsync('reboot')}, + }), + Widget.EventBox({ + child: Widget.Icon({icon: 'system-log-out-symbolic'}), + margin_right: 10, + class_name: 'logout', + tooltip_text: 'log out', + on_primary_click: () => {App.Quit(); Utils.execAsync('loginctl kill-session self')}, + }), + Widget.EventBox({ + child: Widget.Icon({icon: 'system-lock-screen-symbolic'}), + margin_right: 10, + class_name: 'lockscreen', + tooltip_text: 'lock screen', + on_primary_click: () => {Utils.exec('swaylock')}, + }), + Widget.EventBox({ + child: Widget.Icon({icon: 'system-shutdown-symbolic'}), + margin_right: 10, + class_name: 'poweroff', + tooltip_text: 'shutdown', + on_primary_click: () => {App.Quit(); Utils.execAsync('shutdown now')}, + }) + ], + }) +} + + +export default Power \ No newline at end of file diff --git a/home-manager/users/nathan/dotfiles/ags/settings.js b/home-manager/users/nathan/dotfiles/ags/settings.js new file mode 100755 index 0000000..b8ef2a4 --- /dev/null +++ b/home-manager/users/nathan/dotfiles/ags/settings.js @@ -0,0 +1,125 @@ +const audio = await Service.import("audio") +const battery = await Service.import("battery") +const mpris = await Service.import("mpris") + +import Bluetooth from "./bluetooth.js" +import WifiIndicator from "./wifi.js" +import { Players } from "./media.js" + +export function Volume() { + const icons = { + 101: "high", + 67: "high", + 34: "medium", + 1: "low", + 0: "muted", + } + + function getIcon() { + const icon = audio.speaker.is_muted ? 0 : [101, 67, 34, 1, 0].find( + threshold => threshold <= audio.speaker.volume * 100) + + return `audio-volume-${icons[icon]}-symbolic` + } + + + return Widget.EventBox({ + tooltip_text: '', + setup: (self) => self.hook(audio.speaker, () => { + self.tooltip_text = `Volume: ${(100 * audio.speaker.volume).toFixed(0)}%` + }), + child: Widget.Icon({ + class_name: "volume", + icon: Utils.watch(getIcon(), audio.speaker, getIcon), + }) + }) + +} + +// const slider = Widget.Slider({ +// hexpand: true, +// draw_value: false, +// inverted: true, +// on_change: ({ value }) => audio.speaker.volume = value, +// setup: (self) => self.hook(audio.speaker, () => { +// self.value = audio.speaker.volume || 0 +// }), +// }) + + +export function BatteryLabel() { + const value = battery.bind("percent").as(p => p > 0 ? p / 100 : 0) + const icon = battery.bind("percent").as(p => + `battery-${p > 90 ? "full" : p > 70 ? "good" : p > 50 ? "medium" : p > 30 ? "low" : p > 10 ? "caution" : "empty"}-symbolic`) + + return Widget.Box({ + class_name: "battery", + visible: battery.bind("available"), + child: Widget.EventBox({ + child: Widget.Icon({ icon }), + tooltip_text: value.as(p => `Battery: ${(p * 100).toFixed(0)}%`) + }), + }) +} + +function Panel() { + return Widget.Box({ + height_request: 200, + css: 'background: black;', + }) +} + +export function SettingsWindow(monitor = 0) { + return Widget.Window({ + monitor, + name: `Settings-${monitor}`, + anchor: ["top", "bottom", "right"], + margins: [50, 0, 10, 0], + width_request: 400, + exclusivity: "ignore", + layer: "top", + class_name: "SettingsWindow", + child: Widget.Box({ + class_name: "settings_window", + child: Widget.Scrollable({ + vscroll: "always", + hscroll: "never", + hexpand: true, + vexpand: true, + margin: 20, + child: Widget.Box({ + vertical: true, + children: [ + Panel(), + Players() + ] + }), + }), + }), + }) +} + + +export default function Settings() { + + + return Widget.Button({ + tooltip_text: 'Settings', + attribute: false, + margin_right: 8, + child: Widget.Box({ + spacing: 8, + children: [ + Bluetooth(), + WifiIndicator(), + BatteryLabel(), + Volume(), + ], + }), + on_clicked: (self) => { + self.attribute = !self.attribute + + App.toggleWindow(App.windows[1].name) + }, + }) +} diff --git a/home-manager/users/nathan/dotfiles/ags/style.css b/home-manager/users/nathan/dotfiles/ags/style.css new file mode 100755 index 0000000..898f47f --- /dev/null +++ b/home-manager/users/nathan/dotfiles/ags/style.css @@ -0,0 +1,174 @@ + + + + +window.bar { + background-color: rgb(36, 40, 59); + color: rgb(200, 200, 200); + +} + +window.win { + background-color: transparent; + color: rgb(200, 200, 200); +} + +.booox { + color: white; + background-color: white; + +} + +.playerbox { + background-color: rgb(73, 81, 121); + color:rgb(73, 81, 121); + border: 3px solid black; + border-radius: 15px; +} + +.launcher { + color: aqua; + background: none; + border: none; + +} + +box { + color: aqua; +} + + +Window.SettingsWindow { + background-color: black; + color: black; +} +.settings_window { + background-color: rgb(36, 40, 59); + color: teal; + border-radius: 15px; +} + +.focused { + color: aqua; +} + +.other { + color: teal; +} + +.media { + color: aqua; +} + +.media:active { + background-color: aqua; +} + +button { + min-width: 0; + padding-top: 0; + padding-bottom: 0; + background: none; + border: none; + padding: 0px; + padding-left: 5px; + padding-right: 5px; + color: aqua; +} + +button:active { + background-color: aqua; +} + +button:hover { + border-bottom: 3px solid teal; +} + +label { + font-weight: bold; +} + +.workspaces button.focused { + border-bottom: 3px solid aqua; +} + +.client-title { + color: rgb(200, 200, 200); +} + +.clock { + color: rgb(200, 200, 200); +} + +.notification { + color: yellow; +} + +levelbar block, +highlight { + min-height: 4px; +} + +/************************************/ + +window.notification-popups box.notifications { + padding: .5em; +} + +.icon { + min-width: 68px; + min-height: 68px; + margin-right: 1em; +} + +.icon image { + font-size: 58px; + /* to center the icon */ + margin: 5px; + color: yellow; +} + +.icon box { + min-width: 68px; + min-height: 68px; + border-radius: 7px; +} + +.notificationbutton { + color: teal; +} + +.notification { + min-width: 350px; + border-radius: 11px; + padding: 1em; + margin: .5em; + border: 1px solid blue; + background-color: rgb(36, 40, 59); +} + +.notification.critical { + border: 1px solid lightcoral; +} + +.title { + color: black; + font-size: 1.4em; +} + +.body { + color: red; +} + +.actions .action-button { + margin: 0 .4em; + margin-top: .8em; +} + +.actions .action-button:first-child { + margin-left: 0; +} + +.actions .action-button:last-child { + margin-right: 0; +} \ No newline at end of file diff --git a/home-manager/users/nathan/dotfiles/ags/systemtray.js b/home-manager/users/nathan/dotfiles/ags/systemtray.js new file mode 100755 index 0000000..e69de29 diff --git a/home-manager/users/nathan/dotfiles/ags/wifi.js b/home-manager/users/nathan/dotfiles/ags/wifi.js new file mode 100755 index 0000000..e095291 --- /dev/null +++ b/home-manager/users/nathan/dotfiles/ags/wifi.js @@ -0,0 +1,30 @@ +const network = await Service.import('network') + +export default function WifiIndicator() { + return Widget.Box({ + child: Widget.EventBox({ + child: Widget.Icon({ + icon: 'network-wireless-disconnected-symbolic', + }), + + setup: self => self.hook(network.wifi, () => { + self.child.icon = network.wifi.icon_name == 'network-wireless-disabled-symbolic' ? 'network-wireless-disconnected-symbolic' : network.wifi.icon_name + self.tooltip_text = network.wifi.ssid ? network.wifi.ssid : network.wifi.internet + }), + + tooltip_text: 'disconnected', + }), + }) +} + +// const WiredIndicator = () => Widget.Icon({ +// icon: network.wired.bind('icon_name'), +// }) + +// const NetworkIndicator = () => Widget.Stack({ +// children: { +// wifi: WifiIndicator(), +// wired: WiredIndicator(), +// }, +// shown: network.bind('primary').as(p => p || 'wifi'), +// }) diff --git a/home-manager/users/nathan/dotfiles/ags/workspaces.js b/home-manager/users/nathan/dotfiles/ags/workspaces.js new file mode 100755 index 0000000..eab7ea3 --- /dev/null +++ b/home-manager/users/nathan/dotfiles/ags/workspaces.js @@ -0,0 +1,37 @@ +const hyprland = await Service.import("hyprland") + + +function ClientTitle() { + return Widget.Label({ + class_name: "client-title", + max_width_chars: 30, + truncate: "end", + label: hyprland.active.client.bind("title"), + }) +} + + +function Workspaces() { + const activeId = hyprland.active.workspace.bind("id") + const workspaces = hyprland.bind("workspaces") + .as(ws => ws.map(({ id }) => id > 0 ? Widget.Button({ + on_clicked: () => hyprland.messageAsync(`dispatch workspace ${id}`), + child: Widget.Label(`${id}`), + class_name: activeId.as(i => `${i === id ? "focused" : "other"}`), + margin_left: 10, + }) : null + ).sort((a, b) => { return a && b ? Number(a.child.label) - Number(b.child.label) : a ? -1 : 1 })) + + return Widget.CenterBox({ + + spacing: 8, + start_widget: Widget.Box({ + class_name: "workspaces", + spacing: 0, + children: workspaces + }), + end_widget: ClientTitle(), + }) +} + +export default Workspaces diff --git a/home-manager/users/nathan/dotfiles/default.nix b/home-manager/users/nathan/dotfiles/default.nix new file mode 100644 index 0000000..fd69377 --- /dev/null +++ b/home-manager/users/nathan/dotfiles/default.nix @@ -0,0 +1,12 @@ +{ config, lib, ... }: { + + home.file = { + ".config/ags" = { source = ./ags; recursive = true; }; + ".config/hypr" = { source = ./hypr; recursive = true; }; + ".config/swaylock" = { source = ./swaylock; recursive = true; }; + ".config/wal/templates" = { source = ./wal/templates; recursive = true; }; + ".config/zsh" = { source = ./zsh; recursive = true; }; + "Pictures/Wallpaper" = { source = ./Wallpaper; recursive = true; }; + }; + +} diff --git a/home-manager/users/nathan/dotfiles/hypr/main.conf b/home-manager/users/nathan/dotfiles/hypr/main.conf new file mode 100644 index 0000000..77bd09f --- /dev/null +++ b/home-manager/users/nathan/dotfiles/hypr/main.conf @@ -0,0 +1,278 @@ + +#------------------------------------------------# +# _ _ _ _ # +#| | | | | | | | # +#| |___| |_ _ ____ _ _| | __ _.-.___ ___| | # +#| ___ | | | | _ \| |/ | |/ _` | _ \/ _ | # +#| | | | |_| | |_) | /| | (_| | | | | (_| | # +#|_| |_|\__, | __/|__| |_|\__,_|_| |_|\___/_| # +# |___/|_| # +# # +#------------------------------------------------# + +exec-once=onSystemStart + +# Some default env vars. +env = XCURSOR_SIZE,16 + +source = ~/Projects/Olympus/home-manager/nathan/dotfiles/hypr/otf.conf +source = ~/.cache/wal/colors-hypr.conf + +# For all categories, see https://wiki.hyprland.org/Configuring/Variables/ +input { + kb_layout = us + kb_variant = + kb_model = + kb_options = + kb_rules = + + follow_mouse = 1 + + touchpad { + natural_scroll = yes + } + + sensitivity = 0 # -1.0 - 1.0, 0 means no modification. +} + +cursor { + no_hardware_cursors = true +} + +general { + # See https://wiki.hyprland.org/Configuring/Variables/ for more + + gaps_in = 5 + gaps_out = 4 + border_size = 2 + col.active_border = $color1 $color5 100deg + col.inactive_border = $color0 + + layout = dwindle +} +decoration { # See https://wiki.hyprland.org/Configuring/Variables/ for more + + rounding = 2 + + blur { + enabled = false + } + + + #drop_shadow = yes + #shadow_range = 4 + #shadow_render_power = 3 + #col.shadow = rgba(1a1a1aee) +} + +animations { + enabled = yes + + # Some default animations, see https://wiki.hyprland.org/Configuring/Animations/ for more + + bezier = myBezier, 0.05, 0.9, 0.1, 1.05 + + animation = windows, 1, 7, myBezier + animation = windowsOut, 1, 7, default, popin 80% + animation = border, 1, 10, default + animation = borderangle, 1, 8, default + animation = fade, 1, 7, default + animation = workspaces, 1, 6, default +} + + + +dwindle { + # See https://wiki.hyprland.org/Configuring/Dwindle-Layout/ for more + pseudotile = yes # master switch for pseudotiling. Enabling is bound to mainMod + P in the keybinds section below + preserve_split = yes # you probably want this +} + +master { + # See https://wiki.hyprland.org/Configuring/Master-Layout/ for more + new_status = "master" +} + +gestures { + # See https://wiki.hyprland.org/Configuring/Variables/ for more + workspace_swipe = off +} + +misc { + disable_hyprland_logo = false + disable_splash_rendering = true + force_default_wallpaper = 2 +} + +# Binds +$mainMod = ALT + +bind = $mainMod SHIFT, E, exec, colorPrefix kitty + +bind = $mainMod, B, exec, firefox + +bind = $mainMod SHIFT, B, exec, firefox --private-window + +bind = $mainMod, Q, killactive, + +bind = $mainMod, R, exec, colorPrefix kitty -e _systemRebuild + +bind = $mainMod SHIFT, R, exec, colorPrefix kitty -e _homeRebuild + +bind = $mainMod, C, exec, colorPrefix kitty -e bash -c "cd ~/Projects/Olympus; nvim ~/Projects/Olympus/" + +bind = $mainMod, F, exec, thunar +bind = $mainMod SHIFT, F, fullscreen + +bind = $mainMod, semicolon, exec, colorPrefix kitty -e nvim ~ + +bind = $mainMod, Insert, exec, libreoffice & + +bind = $mainMod, H, exec, bluetoothctl connect 88:D0:39:F9:83:CE + +bind = $mainMod, V, togglefloating, + +bind = $mainMod SHIFT, V, exec, vlc & + +bind = , Menu, exec, rofi -show drun + +bind = $mainMod, Menu, exec, killall .ags-wrapped; ags & + +bind = $mainMod, P, pseudo, # dwindle + +bind = $mainMod, Z, togglesplit, # dwindle + +bind = $mainMod, M, exec, spotify + +bind = $mainMod SHIFT, M, exec, firefox soundcloud.com/you/library + +bind = $mainMod CTRL, M, exec, colorPrefix kitty -e ncmpcpp -s browser + +bind = $mainMod, XF86AudioPlay, exec, mpc load casual + +bind = , XF86AudioPlay, exec, playerctl play-pause + +bind = , XF86AudioPause, exec, playerctl pause + +bind = , XF86AudioNext, exec, playerctl next + +bind = , XF86AudioPrev, exec, playerctl previous + +bind = , XF86Launch2, exec, steam & +bind = $mainMod, XF86Launch2, exec, prismlauncher + +bind = CTRL SHIFT, XF86Launch2, exec, if [[ $(hyprctl monitors | grep 0x0 | sed -n -e "s/\t*1920x1080@//" -e "s/.[1234567890]* at 0x0//p") == 300 ]]; then hyprctl keyword monitor eDP-1,1920x1080@60,0x0,1; else hyprctl keyword monitor eDP-1,1920x1080@300,0x0,1; fi + +bind = , XF86Calculator, exec, geogebra + +bind = $mainMod SHIFT, Print, exec, firefox localhost:631 +bind = , Print, exec, grim -g "$(slurp)" + +bind = $mainMod, Return, exec, vesktop --enable-features=UseOzonePlatform --ozone-platform=wayland & + +bind = $mainMod CTRL, Return, exec, firefox https://discord.com/app + +# Move focus with mainMod + arrow keys +bind = $mainMod, H, movefocus, l +bind = $mainMod, L, movefocus, r +bind = $mainMod, J, movefocus, u +bind = $mainMod, K, movefocus, d +# Switch workspaces with mainMod + [0-9] +bind = $mainMod, 1, workspace, 1 +bind = $mainMod, 2, workspace, 2 +bind = $mainMod, 3, workspace, 3 +bind = $mainMod, 4, workspace, 4 +bind = $mainMod, 5, workspace, 5 +bind = $mainMod, 6, workspace, 6 +bind = $mainMod, 7, workspace, 7 +bind = $mainMod, 8, workspace, 8 +bind = $mainMod, 9, workspace, 9 +bind = $mainMod, 0, workspace, 10 + +bind = $mainMod, Home, workspace, 11 + +# Move active window to a workspace with mainMod + SHIFT + [0-9] +bind = $mainMod SHIFT, 1, movetoworkspace, 1 +bind = $mainMod SHIFT, 2, movetoworkspace, 2 +bind = $mainMod SHIFT, 3, movetoworkspace, 3 +bind = $mainMod SHIFT, 4, movetoworkspace, 4 +bind = $mainMod SHIFT, 5, movetoworkspace, 5 +bind = $mainMod SHIFT, 6, movetoworkspace, 6 +bind = $mainMod SHIFT, 7, movetoworkspace, 7 +bind = $mainMod SHIFT, 8, movetoworkspace, 8 +bind = $mainMod SHIFT, 9, movetoworkspace, 9 +bind = $mainMod SHIFT, 0, movetoworkspace, 10 + +bind = $mainMod SHIFT, Home, movetoworkspace, 11 + +# Scroll through existing workspaces with mainMod + scroll +bind = $mainMod, right, workspace, e+1 +bind = $mainMod, left, workspace, e-1 + +#switch network connections +bind = CTRL SHIFT, Escape, exec, nmcli device down wlo1 +bind = CTRL SHIFT, 0, exec, nmcli connection up Hotspot +bind = CTRL SHIFT, 1, exec, nmcli connection up EagleNet +bind = CTRL SHIFT, 2, exec, nmcli connection up CXNK00813829 +bind = CTRL SHIFT, 3, exec, nmcli connection up ATT9MhT2ql + +#brightness keys +bind = , XF86MonBrightnessUp, exec, brightnessctl set +10% +bind = , XF86MonBrightnessDown, exec, brightnessctl set 10%- + +#volume keys +binde = , XF86AudioRaiseVolume, exec, wpctl set-volume @DEFAULT_SINK@ 10%+ +binde = , XF86AudioLowerVolume, exec, wpctl set-volume @DEFAULT_SINK@ 10%- +bind = , XF86AudioMute, exec, wpctl set-mute @DEFAULT_SINK@ toggle +bind = $mainMod, F9, exec, pavucontrol + +#screen lock key +bind = $mainMod, F12, exec, swaylock + +#logout shortcut +bind = CTRL ALT, Delete, exec, loginctl kill-session self + + +# Move/resize windows with mainMod + LMB/RMB and dragging +bind = $mainMod SHIFT, J, movewindow, u +bind = $mainMod SHIFT, K, movewindow, d +bind = $mainMod SHIFT, H, movewindow, l +bind = $mainMod SHIFT, L, movewindow, r +bindm = $mainMod, mouse:272, movewindow +bindm = $mainMod SHIFT, mouse:272, resizewindow + +$scratchpadsize = size 60% 80% +$scratchpad = class:^(scratchpad)$ + +windowrulev2 = float, $scratchpad +windowrulev2 = $scratchpadsize, $scratchpad +windowrulev2 = workspace special silent, $scratchpad + +$kitty = class:^(scratchpad-kitty)$ + +windowrulev2 = float, $kitty +windowrulev2 = $scratchpadsize, $kitty +windowrulev2 = workspace special silent, $kitty +$nvim = class:^(scratchpad-nvim)$ + +windowrulev2 = float, $nvim +windowrulev2 = $scratchpadsize, $nvim +windowrulev2 = workspace special silent, $nvim + +bind = $mainMod, N, exec, colorPrefix pypr toggle nvim +bind = $mainMod, E, exec, colorPrefix pypr toggle free + + +bind = CTRL SHIFT, Home, exec, ssh nathan@blunkall.us -fL 5900:localhost:5900 sleep 10; vncviewer localhost:5900 -fullscreen +bind = CTRL SHIFT, Home, submap, clean + + +bind = $mainMod CTRL, Home, submap, clean + +submap = clean + +bind = $mainMod CTRL, Home, submap, reset + +submap = reset + + diff --git a/home-manager/users/nathan/dotfiles/hypr/otf.conf b/home-manager/users/nathan/dotfiles/hypr/otf.conf new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/home-manager/users/nathan/dotfiles/hypr/otf.conf @@ -0,0 +1 @@ + diff --git a/home-manager/users/nathan/dotfiles/hypr/pyprland.toml b/home-manager/users/nathan/dotfiles/hypr/pyprland.toml new file mode 100644 index 0000000..14eee5a --- /dev/null +++ b/home-manager/users/nathan/dotfiles/hypr/pyprland.toml @@ -0,0 +1,22 @@ + [pyprland] + plugins = [ + "scratchpads" + ] + + [scratchpads.nvim] + animation = "fromTop" + command = "kitty --class scratchpad-nvim -e nvim ~/Projects" + lazy = false + class = "scratchpad-nvim" + margin = 100 + multi = true + excludes = "*" + + [scratchpads.free] + animation = "fromBottom" + command = "kitty --class scratchpad -e tmux" + class = "scratchpad" + lazy = false + margin = 100 + multi = true + excludes = "*" diff --git a/home-manager/users/nathan/dotfiles/swaylock/config b/home-manager/users/nathan/dotfiles/swaylock/config new file mode 100755 index 0000000..2c26b68 --- /dev/null +++ b/home-manager/users/nathan/dotfiles/swaylock/config @@ -0,0 +1,16 @@ +indicator +ignore-empty-password +indicator-thickness=10 +indicator-radius=100 +image=~/.cache/bg +clock +ring-color=33ddff55 +key-hl-color=dd4444 +line-color=00000000 +inside-color=00000088 +text-color=00a6f0 +text-clear-color=daa520 +ring-clear-color=002251 +separator-color=00000000 +grace=2 +fade-in=0.5 diff --git a/home-manager/users/nathan/dotfiles/wal/templates/cava_config b/home-manager/users/nathan/dotfiles/wal/templates/cava_config new file mode 100644 index 0000000..b85c4df --- /dev/null +++ b/home-manager/users/nathan/dotfiles/wal/templates/cava_config @@ -0,0 +1,279 @@ +## Configuration file for CAVA. +# Remove the ; to change parameters. + + +[general] + +# Smoothing mode. Can be 'normal', 'scientific' or 'waves'. DEPRECATED as of 0.6.0 +; mode = normal + +# Accepts only non-negative values. +; framerate = 60 + +# 'autosens' will attempt to decrease sensitivity if the bars peak. 1 = on, 0 = off +# new as of 0.6.0 autosens of low values (dynamic range) +# 'overshoot' allows bars to overshoot (in % of terminal height) without initiating autosens. DEPRECATED as of 0.6.0 +; autosens = 1 +; overshoot = 20 + +# Manual sensitivity in %. If autosens is enabled, this will only be the initial value. +# 200 means double height. Accepts only non-negative values. +; sensitivity = 100 + +# The number of bars (0-512). 0 sets it to auto (fill up console). +# Bars' width and space between bars in number of characters. +; bars = 0 +; bar_width = 2 +; bar_spacing = 1 +# bar_height is only used for output in "noritake" format +; bar_height = 32 + +# For SDL width and space between bars is in pixels, defaults are: +; bar_width = 20 +; bar_spacing = 5 + +# sdl_glsl have these default values, they are only used to calulate max number of bars. +; bar_width = 1 +; bar_spacing = 0 + + +# Lower and higher cutoff frequencies for lowest and highest bars +# the bandwidth of the visualizer. +# Note: there is a minimum total bandwidth of 43Mhz x number of bars. +# Cava will automatically increase the higher cutoff if a too low band is specified. +; lower_cutoff_freq = 50 +; higher_cutoff_freq = 10000 + + +# Seconds with no input before cava goes to sleep mode. Cava will not perform FFT or drawing and +# only check for input once per second. Cava will wake up once input is detected. 0 = disable. +; sleep_timer = 0 + + +[input] + +# Audio capturing method. Possible methods are: 'fifo', 'portaudio', 'pipewire', 'alsa', 'pulse', 'sndio', 'oss', 'jack' or 'shmem' +# Defaults to 'oss', 'pipewire', 'sndio', 'jack', 'pulse', 'alsa', 'portaudio' or 'fifo', in that order, dependent on what support cava was built with. +# On Mac it defaults to 'portaudio' or 'fifo' +# On windows this is automatic and no input settings are needed. +# +# All input methods uses the same config variable 'source' +# to define where it should get the audio. +# +# For pulseaudio and pipewire 'source' will be the source. Default: 'auto', which uses the monitor source of the default sink +# (all pulseaudio sinks(outputs) have 'monitor' sources(inputs) associated with them). +# +# For pipewire 'source' will be the object name or object.serial of the device to capture from. +# Both input and output devices are supported. +# +# For alsa 'source' will be the capture device. +# For fifo 'source' will be the path to fifo-file. +# For shmem 'source' will be /squeezelite-AA:BB:CC:DD:EE:FF where 'AA:BB:CC:DD:EE:FF' will be squeezelite's MAC address +# +# For sndio 'source' will be a raw recording audio descriptor or a monitoring sub-device, e.g. 'rsnd/2' or 'snd/1'. Default: 'default'. +# README.md contains further information on how to setup CAVA for sndio. +# +# For oss 'source' will be the path to a audio device, e.g. '/dev/dsp2'. Default: '/dev/dsp', i.e. the default audio device. +# README.md contains further information on how to setup CAVA for OSS on FreeBSD. +# +# For jack 'source' will be the name of the JACK server to connect to, e.g. 'foobar'. Default: 'default'. +# README.md contains further information on how to setup CAVA for JACK. +# +; method = pulse +; source = auto + +; method = pipewire +; source = auto + +; method = alsa +; source = hw:Loopback,1 + +; method = fifo +; source = /tmp/mpd.fifo + +; method = shmem +; source = /squeezelite-AA:BB:CC:DD:EE:FF + +; method = portaudio +; source = auto + +; method = sndio +; source = default + +; method = oss +; source = /dev/dsp + +; method = jack +; source = default + +# The options 'sample_rate', 'sample_bits', 'channels' and 'autoconnect' can be configured for some input methods: +# sample_rate: fifo, pipewire, sndio, oss +# sample_bits: fifo, pipewire, sndio, oss +# channels: sndio, oss, jack +# autoconnect: jack +# Other methods ignore these settings. +# +# For 'sndio' and 'oss' they are only preferred values, i.e. if the values are not supported +# by the chosen audio device, the device will use other supported values instead. +# Example: 48000, 32 and 2, but the device only supports 44100, 16 and 1, then it +# will use 44100, 16 and 1. +# +; sample_rate = 44100 +; sample_bits = 16 +; channels = 2 +; autoconnect = 2 + + +[output] + +# Output method. Can be 'ncurses', 'noncurses', 'raw', 'noritake', 'sdl' +# or 'sdl_glsl'. +# 'noncurses' (default) uses a buffer and cursor movements to only print +# changes from frame to frame in the terminal. Uses less resources and is less +# prone to tearing (vsync issues) than 'ncurses'. +# +# 'raw' is an 8 or 16 bit (configurable via the 'bit_format' option) data +# stream of the bar heights that can be used to send to other applications. +# 'raw' defaults to 200 bars, which can be adjusted in the 'bars' option above. +# +# 'noritake' outputs a bitmap in the format expected by a Noritake VFD display +# in graphic mode. It only support the 3000 series graphical VFDs for now. +# +# 'sdl' uses the Simple DirectMedia Layer to render in a graphical context. +# 'sdl_glsl' uses SDL to create an OpenGL context. Write your own shaders or +# use one of the predefined ones. +; method = noncurses + +# Orientation of the visualization. Can be 'bottom', 'top', 'left' or 'right'. +# Default is 'bottom'. Other orientations are only supported on sdl and ncruses +# output. Note: many fonts have weird glyphs for 'top' and 'right' characters, +# which can make ncurses not look right. +; orientation = bottom + +# Visual channels. Can be 'stereo' or 'mono'. +# 'stereo' mirrors both channels with low frequencies in center. +# 'mono' outputs left to right lowest to highest frequencies. +# 'mono_option' set mono to either take input from 'left', 'right' or 'average'. +# set 'reverse' to 1 to display frequencies the other way around. +; channels = stereo +; mono_option = average +; reverse = 0 + +# Raw output target. A fifo will be created if target does not exist. +; raw_target = /dev/stdout + +# Raw data format. Can be 'binary' or 'ascii'. +; data_format = binary + +# Binary bit format, can be '8bit' (0-255) or '16bit' (0-65530). +; bit_format = 16bit + +# Ascii max value. In 'ascii' mode range will run from 0 to value specified here +; ascii_max_range = 1000 + +# Ascii delimiters. In ascii format each bar and frame is separated by a delimiters. +# Use decimal value in ascii table (i.e. 59 = ';' and 10 = '\n' (line feed)). +; bar_delimiter = 59 +; frame_delimiter = 10 + +# sdl window size and position. -1,-1 is centered. +; sdl_width = 1000 +; sdl_height = 500 +; sdl_x = -1 +; sdl_y= -1 +; sdl_full_screen = 0 + +# set label on bars on the x-axis. Can be 'frequency' or 'none'. Default: 'none' +# 'frequency' displays the lower cut off frequency of the bar above. +# Only supported on ncurses and noncurses output. +; xaxis = none + +# enable alacritty synchronized updates. 1 = on, 0 = off +# removes flickering in alacritty terminal emulator. +# defaults to off since the behaviour in other terminal emulators is unknown +; alacritty_sync = 0 + +# Shaders for sdl_glsl, located in $HOME/.config/cava/shaders +; vertex_shader = pass_through.vert +; fragment_shader = bar_spectrum.frag + +; for glsl output mode, keep rendering even if no audio +; continuous_rendering = 0 + +# disable console blank (screen saver) in tty +# (Not supported on FreeBSD) +; disable_blanking = 0 + +# show a flat bar at the bottom of the screen when idle, 1 = on, 0 = off +; show_idle_bar_heads = 1 + +# show waveform instead of frequency spectrum, 1 = on, 0 = off +; waveform = 0 + +[color] + +# Colors can be one of seven predefined: black, blue, cyan, green, magenta, red, white, yellow. +# Or defined by hex code '#xxxxxx' (hex code must be within ''). User defined colors requires +# a terminal that can change color definitions such as Gnome-terminal or rxvt. +# default is to keep current terminal color +; background = default +; foreground = default + +# SDL and sdl_glsl only support hex code colors, these are the default: +; background = '#111111' +; foreground = '#33ffff' + + +# Gradient mode, only hex defined colors are supported, +# background must also be defined in hex or remain commented out. 1 = on, 0 = off. +# You can define as many as 8 different colors. They range from bottom to top of screen + gradient = 1 + gradient_count = 8 + gradient_color_1 = '{color1}' + gradient_color_2 = '{color2}' + gradient_color_3 = '{color3}' + gradient_color_4 = '{color4}' + gradient_color_5 = '{color5}' + gradient_color_6 = '{color6}' + gradient_color_7 = '{color7}' + gradient_color_8 = '{color8}' + + + +[smoothing] + +# Percentage value for integral smoothing. Takes values from 0 - 100. +# Higher values means smoother, but less precise. 0 to disable. +# DEPRECATED as of 0.8.0, use noise_reduction instead +; integral = 77 + +# Disables or enables the so-called "Monstercat smoothing" with or without "waves". Set to 0 to disable. +; monstercat = 0 +; waves = 0 + +# Set gravity percentage for "drop off". Higher values means bars will drop faster. +# Accepts only non-negative values. 50 means half gravity, 200 means double. Set to 0 to disable "drop off". +# DEPRECATED as of 0.8.0, use noise_reduction instead +; gravity = 100 + + +# In bar height, bars that would have been lower that this will not be drawn. +# DEPRECATED as of 0.8.0 +; ignore = 0 + +# Noise reduction, int 0 - 100. default 77 +# the raw visualization is very noisy, this factor adjusts the integral and gravity filters to keep the signal smooth +# 100 will be very slow and smooth, 0 will be fast but noisy. +; noise_reduction = 77 + + +[eq] + +# This one is tricky. You can have as much keys as you want. +# Remember to uncomment more than one key! More keys = more precision. +# Look at readme.md on github for further explanations and examples. +; 1 = 1 # bass +; 2 = 1 +; 3 = 1 # midtone +; 4 = 1 +; 5 = 1 # treble diff --git a/home-manager/users/nathan/dotfiles/wal/templates/colors-ags.css b/home-manager/users/nathan/dotfiles/wal/templates/colors-ags.css new file mode 100755 index 0000000..f2c0906 --- /dev/null +++ b/home-manager/users/nathan/dotfiles/wal/templates/colors-ags.css @@ -0,0 +1,161 @@ + + + + +window.bar {{ + background-color: {color1.rgba}; + color: {color1.rgba}; + opacity: 1; + +}} + +.playerbox {{ + background-color: {color2}; + color:rgb(73, 81, 121); + border: 3px solid black; + border-radius: 15px; +}} + +.launcher {{ + background: none; + border: none; +}} + +box {{ + color: {color11}; +}} + + +Window.SettingsWindow {{ + background-color: black; + color: black; +}} +.settings_window {{ + background-color: {color1.rgba}; + border-radius: 15px; +}} + +.focused {{ + color: {color11}; +}} + +.other {{ + color: {color3}; +}} + +.media {{ + color: {color11}; +}} + +.media:active {{ + background-color: {color11}; +}} + +button {{ + min-width: 0; + padding-top: 0; + padding-bottom: 0; + background: none; + border: none; + padding: 0px; + padding-left: 5px; + padding-right: 5px; + color: {color11}; +}} + +button:active {{ + background-color: {color11}; +}} + +button:hover {{ + border-bottom: 3px solid {color3}; +}} + +label {{ + font-weight: bold; +}} + +.workspaces button.focused {{ + border-bottom: 3px solid {color11}; +}} + +.client-title {{ + color: {color11}; +}} + +.clock {{ + color: {color11}; +}} + +.notification {{ + color: yellow; +}} + +levelbar block, +highlight {{ + min-height: 4px; +}} + +/************************************/ + +window.notification-popups box.notifications {{ + padding: .5em; +}} + +.icon {{ + min-width: 68px; + min-height: 68px; + margin-right: 1em; +}} + +.icon image {{ + font-size: 58px; + /* to center the icon */ + margin: 5px; + color: yellow; +}} + +.icon box {{ + min-width: 68px; + min-height: 68px; + border-radius: 7px; +}} + +.notificationbutton {{ + color: {color3}; +}} + +.notification {{ + min-width: 350px; + border-radius: 11px; + padding: 1em; + margin: .5em; + border: 1px solid blue; + background-color: {color2}; +}} + +.notification.critical {{ + border: 1px solid lightcoral; +}} + +.title {{ + color: aqua; + font-size: 1.4em; +}} + +.body {{ + color: teal; +}} + +.actions .action-button {{ + margin: 0 .4em; + margin-top: .8em; +}} + +.actions .action-button:first-child {{ + margin-left: 0; +}} + +.actions .action-button:last-child {{ + margin-right: 0; +}} diff --git a/home-manager/users/nathan/dotfiles/wal/templates/colors-discord.css b/home-manager/users/nathan/dotfiles/wal/templates/colors-discord.css new file mode 100644 index 0000000..f0e4b96 --- /dev/null +++ b/home-manager/users/nathan/dotfiles/wal/templates/colors-discord.css @@ -0,0 +1,23 @@ +--accent-color: {color7}; +--border-color: {color3}; +--background-1: rgba({color0.rgb}, 200); +--background-2: transparent; +--background-mentioned: {color3} !important; +--background-mentioned-hover: {color3} !important; +--background-modifier-hover: {color6} !important; +--background-modifier-active: {color3} !important; +--text-normal: {color1} !important; +--text-positive: {color2} !important; +--text-muted: {color3} !important; +--text-link: {color4} !important; +--button-background: {color5} !important; +--button-background-hover: {color0} !important; +--button-background-active: {color0} !important; +--button-accent-hover: {color0} !important; +--button-accent-active: {color5} !important; +--button-destructive: {color5} !important; +--button-destructive-hover: {color4} !important; +--button-destructive-active: {color4} !important; +--settings-icon-color: {color0} !important; +--tab-selected: {color2} !important; +--switch: {color1} !important; diff --git a/home-manager/users/nathan/dotfiles/wal/templates/colors-hypr.conf b/home-manager/users/nathan/dotfiles/wal/templates/colors-hypr.conf new file mode 100644 index 0000000..c1ccbaf --- /dev/null +++ b/home-manager/users/nathan/dotfiles/wal/templates/colors-hypr.conf @@ -0,0 +1,18 @@ +$foregroundCol = 0xff{foreground.strip} +$backgroundCol = 0xff{background.strip} +$color0 = 0xff{color0.strip} +$color1 = 0xff{color1.strip} +$color2 = 0xff{color2.strip} +$color3 = 0xff{color3.strip} +$color4 = 0xff{color4.strip} +$color5 = 0xff{color5.strip} +$color6 = 0xff{color6.strip} +$color7 = 0xff{color7.strip} +$color8 = 0xff{color8.strip} +$color9 = 0xff{color9.strip} +$color10 = 0xff{color10.strip} +$color11 = 0xff{color11.strip} +$color12 = 0xff{color12.strip} +$color13 = 0xff{color13.strip} +$color14 = 0xff{color14.strip} +$color15 = 0xff{color15.strip} diff --git a/home-manager/users/nathan/dotfiles/zsh/ohmyposh.toml b/home-manager/users/nathan/dotfiles/zsh/ohmyposh.toml new file mode 100644 index 0000000..0d03cd6 --- /dev/null +++ b/home-manager/users/nathan/dotfiles/zsh/ohmyposh.toml @@ -0,0 +1,120 @@ +console_title_template = '{{ .Shell }} in {{ .Folder }}' +version = 3 +final_space = true + +[palette] + c0 = '#0B0704' + c1 = '#846550' + c10 = '#636E90' + c11 = '#6FAEAC' + c12 = '#A5ADA2' + c13 = '#F1DCB7' + c14 = '#A1E7DA' + c15 = '#c2c1c0' + c2 = '#4a526c' + c3 = '#538281' + c4 = '#7b8179' + c5 = '#b4a589' + c6 = '#78ada3' + c7 = '#958d89' + c8 = '#665b54' + c9 = '#B1876B' + +[secondary_prompt] + template = '❭❭ ' + background = 'transparent' + +[transient_prompt] + template = '{{ if gt .Code 0 }}!❭ {{else}}❭ {{end}}' + background = 'transparent' + foreground_templates = ['{{ if gt .Code 0 }}p:c13{{end}}', '{{ if eq .Code 0 }}p:c14{{end}}'] + +[[blocks]] + type = 'prompt' + alignment = 'left' + newline = true + + [[blocks.segments]] + trailing_diamond = '' + template = ' {{ .Icon }} ' + foreground = 'p:c12' + background = 'p:c1' + type = 'os' + style = 'diamond' + + [blocks.segments.properties] + cache_duration = 'none' + + [[blocks.segments]] + trailing_diamond = '' + template = '{{ .UserName }}@{{ .HostName }}' + foreground = 'p:c14' + background = 'p:c2' + type = 'session' + style = 'diamond' + + [blocks.segments.properties] + cache_duration = 'none' + + [[blocks.segments]] + trailing_diamond = '' + template = '{{ .Path }}' + foreground = 'p:c13' + background = 'p:c4' + type = 'path' + style = 'diamond' + + [blocks.segments.properties] + cache_duration = 'none' + style = 'full' + +[[blocks]] + type = 'prompt' + alignment = 'right' + overflow = 'hidden' + + [[blocks.segments]] + leading_diamond = '' + template = '{{ .FormattedMs }}' + foreground = 'p:c13' + background = 'p:c4' + type = 'executiontime' + style = 'diamond' + + [blocks.segments.properties] + cache_duration = 'none' + + [[blocks.segments]] + leading_diamond = '' + foreground = 'p:c14' + background = 'p:c2' + type = 'time' + style = 'diamond' + + [blocks.segments.properties] + cache_duration = 'none' + + [[blocks.segments]] + leading_diamond = '' + foreground = 'p:c12' + background = 'p:c1' + type = 'shell' + style = 'diamond' + + [blocks.segments.properties] + cache_duration = 'none' + +[[blocks]] + type = 'prompt' + alignment = 'left' + newline = true + + [[blocks.segments]] + template = '{{ if gt .Code 0 }}!❭ {{else}}❭ {{end}}' + background = 'transparent' + type = 'text' + style = 'plain' + foreground_templates = ['{{ if gt .Code 0 }}p:c13{{end}}', '{{ if eq .Code 0 }}p:c14{{end}}'] + + [blocks.segments.properties] + cache_duration = 'none' diff --git a/home-manager/users/nathan/packages/default.nix b/home-manager/users/nathan/packages/default.nix new file mode 100644 index 0000000..e2bfdaf --- /dev/null +++ b/home-manager/users/nathan/packages/default.nix @@ -0,0 +1,112 @@ +{ config, lib, pkgs, inputs, ... }: let + system = "x86_64-linux"; + + pkgs-us = import inputs.nixpkgs-us { + inherit system; + config.allowUnfree = true; + }; + + in { + + imports = [ + ./scripts + ]; + + options.homeconfig.minimal = lib.options.mkOption { + type = lib.types.bool; + default = false; + }; + + config = lib.mkMerge [ + + { + home.packages = with pkgs; [ + killall + btop + zip + unzip + gcc + zulu + rsync + lxqt.lxqt-policykit + blueberry + wl-clipboard + xfce.thunar + grim + slurp + curl + wget + ]; + } + + (lib.mkIf (!config.homeconfig.minimal) { + + nixpkgs.config = { + allowUnfree = true; + }; + + home.packages = with pkgs; let + pypkgs = ps: with ps; [ + numpy + matplotlib + scipy + + pandas + pyaudio + pyusb + debugpy + requests + ]; + + in [ + + cava + android-tools + neovim-remote + handbrake + quickemu + bottles + + (pkgs.python312.withPackages pypkgs) + + brightnessctl + libdbusmenu-gtk3 + lmms + #unfree { + geogebra + spotify + pkgs-us.rustdesk-flutter + #} + + neofetch + pkgs-us.mpv + ncmpcpp + playerctl + mpc-cli + vlc + pavucontrol + yewtube + ytmdl + ffmpeg + rpi-imager + tigervnc + keepassxc + httplz + + #3D modeling/printing + blender + freecad-wayland + cura-appimage + + #productivity + libreoffice + super-productivity + + #games + prismlauncher + ]; + + }) + ]; + +} diff --git a/home-manager/users/nathan/packages/scripts/default.nix b/home-manager/users/nathan/packages/scripts/default.nix new file mode 100644 index 0000000..3e899db --- /dev/null +++ b/home-manager/users/nathan/packages/scripts/default.nix @@ -0,0 +1,95 @@ +{ config, lib, pkgs, ... }: { + + options = { + homeScripts.enable = lib.options.mkOption { + type = lib.types.bool; + default = true; + }; + }; + + config = lib.mkIf config.homeScripts.enable { + home.packages = [ + + #scripts + (pkgs.writeShellScriptBin "_systemRebuild" '' + ${pkgs.nh}/bin/nh os switch --ask /home/nathan/Projects/Olympus + echo //////Enter to close////// + read + '') + (pkgs.writeShellScriptBin "_homeRebuild" '' + ${pkgs.nh}/bin/nh home switch --ask /home/nathan/Projects/Olympus + echo //////Enter to close////// + read + '') + + (pkgs.writeShellScriptBin "randWallpaper" '' + file=$(ls /home/nathan/Pictures/Wallpaper/ | shuf -n 1) + setWallpaper /home/nathan/Pictures/Wallpaper/$file + '') + + (pkgs.writeShellScriptBin "setWallpaper" '' + img=''$(realpath ''${1:-~/.cache/bg}) + ${pkgs.swww}/bin/swww img ''$img + changeColors ''$img ''$2 + '') + + (pkgs.writeShellScriptBin "changeColors" '' + + if [[ $(ls ~/.cache/ | grep bga) != bga ]]; then + echo 100 > ~/.cache/bga + fi + + alpha=''${2:-`cat ~/.cache/bga`} + + img=''$(realpath ''${1:-~/.cache/bg}) + + if [[ $alpha -lt 0 ]]; then + $alpha=0 + fi + + if [[ $alpha -gt 100 ]]; then + $alpha=100 + fi + + wal -i $img -a $alpha --cols16 -n + + echo $alpha > ~/.cache/bga + + rm ~/.cache/bg + ln -s $img ~/.cache/bg + + sleep 0.4 + + pywalfox update & + + themecord > ~/.cache/_.txt && rm ~/.cache/_.txt + + [[ $(pidof cava) != "" ]] && pkill -USR1 cava & + + for i in $(ls /run/user/1000 | grep nvim); do nvr -s --servername /run/user/1000/$i --remote-send 'colorscheme pywal'; done + + pkill -USR1 kitty + '') + + (pkgs.writeShellScriptBin "onSystemStart" '' + ${pkgs.swww}/bin/swww-daemon & + randWallpaper & + ags & + pypr & + lxqt-policykit-agent & + # nmcli device wifi connect EagleNet password '~?C#@ZiH' & + hyprctl setcursor Bibata-Modern-Classic 16 & + sleep 3 + hyprctl reload & + #tmux new-session -s hyprland + '') + + (pkgs.writeShellScriptBin "colorPrefix" '' + exec -a "$0" "$@" & + sleep 0.4 && changeColors & + '') + + ]; + }; +} + diff --git a/home-manager/users/nathan/programs/ags/default.nix b/home-manager/users/nathan/programs/ags/default.nix new file mode 100644 index 0000000..d6dd04d --- /dev/null +++ b/home-manager/users/nathan/programs/ags/default.nix @@ -0,0 +1,39 @@ +{ config, lib, pkgs, inputs, ... }: { + + imports = [ inputs.ags.homeManagerModules.default ]; + + options.homeconfig.ags.enable = lib.options.mkOption { + type = lib.types.bool; + default = false; + }; + + config = lib.mkIf config.homeconfig.ags.enable { + programs.ags = { + enable = true; + + extraPackages = with pkgs; [ + gtksourceview + webkitgtk + accountsservice + ]; + }; + + home.file.".config/ags/launcher.js".text = /*javascript*/ '' + function Launcher() { + return Widget.EventBox({ + class_name: "launcher", + hpack: "center", + child: Widget.Icon({ + icon: '${pkgs.nixos-icons}/share/icons/hicolor/48x48/apps/nix-snowflake.png', + css: 'font-size: 24px;' + }), + on_primary_click: () => {Utils.execAsync('rofi -show drun')}, + margin_left: 10, + }) + } + + export default Launcher + ''; + + }; +} diff --git a/home-manager/users/nathan/programs/ags2/default.nix b/home-manager/users/nathan/programs/ags2/default.nix new file mode 100644 index 0000000..019c382 --- /dev/null +++ b/home-manager/users/nathan/programs/ags2/default.nix @@ -0,0 +1,12 @@ +{ config, lib, pkgs, ... }: { + + options.homeconfig.ags2.enable = lib.options.mkOption { + type = lib.types.bool; + default = false; + }; + + config = lib.mkIf config.homeconfig.ags2.enable { + + + }; +} diff --git a/home-manager/users/nathan/programs/calcurse/default.nix b/home-manager/users/nathan/programs/calcurse/default.nix new file mode 100644 index 0000000..b63913b --- /dev/null +++ b/home-manager/users/nathan/programs/calcurse/default.nix @@ -0,0 +1,14 @@ +{ config, lib, pkgs, ... }: { + + options.homeconfig.calcurse.enable = lib.options.mkOption { + type = lib.types.bool; + default = false; + }; + + config = lib.mkIf config.homeconfig.calcurse.enable { + home.packages = with pkgs; [ + calcurse + libnotify + ]; + }; +} diff --git a/home-manager/users/nathan/programs/default.nix b/home-manager/users/nathan/programs/default.nix new file mode 100644 index 0000000..bb06206 --- /dev/null +++ b/home-manager/users/nathan/programs/default.nix @@ -0,0 +1,24 @@ +{ config, lib, pkgs, inputs, ... }: { + + imports = [ + ./ags + ./git + ./nh + ./hyprland + ./terminal + ./rofi + ./pywal + ./swaylock + ./calcurse + ./firefox + ]; + + config = { + + home.packages = lib.mkIf (!config.homeconfig.wal.enable) [ + inputs.nixvim.packages.${pkgs.system}.default + ]; + + home.sessionVariables.EDITOR = "nvim"; + }; +} diff --git a/home-manager/users/nathan/programs/firefox/default.nix b/home-manager/users/nathan/programs/firefox/default.nix new file mode 100644 index 0000000..7367639 --- /dev/null +++ b/home-manager/users/nathan/programs/firefox/default.nix @@ -0,0 +1,59 @@ +{ config, lib, pkgs, inputs, ... }: { + + options.homeconfig.firefox.enable = lib.options.mkOption { + type = lib.types.bool; + default = false; + }; + + config = lib.mkIf config.homeconfig.firefox.enable { + + home.sessionVariables.BROWSER = "${config.programs.firefox.package}/bin/firefox"; + + home.packages = lib.mkIf config.homeconfig.wal.enable [ + pkgs.pywalfox-native + ]; + + home.file.".mozilla/native-messaging-hosts/pywalfox.json".text = let + pywalfox-wrapper = pkgs.writeShellScriptBin "pywalfox-wrapper" '' + ${pkgs.pywalfox-native}/bin/pywalfox start + ''; + in lib.replaceStrings [ "" ] [ + "${pywalfox-wrapper}/bin/pywalfox-wrapper" + ] (lib.readFile "${pkgs.pywalfox-native}/lib/python3.12/site-packages/pywalfox/assets/manifest.json"); + + + programs.firefox = { + + enable = true; + package = pkgs.firefox; + + profiles.nathan = { + search = { + default = "ddg"; + privateDefault = "ddg"; + }; + bookmarks = { + force = true; + settings = [ + { + name = "toolbar"; + toolbar = true; + bookmarks = [ + { + name = "NixOS Search - Packages"; + url = "https://search.nixos.org/packages"; + } + ]; + } + ]; + }; + + extensions.packages = with inputs.firefox-addons.packages.${pkgs.system}; [ + ublock-origin + keepassxc-browser + pywalfox + ]; + }; + }; + }; +} diff --git a/home-manager/users/nathan/programs/git/default.nix b/home-manager/users/nathan/programs/git/default.nix new file mode 100644 index 0000000..084481e --- /dev/null +++ b/home-manager/users/nathan/programs/git/default.nix @@ -0,0 +1,44 @@ +{ config, lib, ... }: { + + options.homeconfig.git.enable = lib.options.mkOption { + type = lib.types.bool; + default = false; + }; + + config = lib.mkIf config.homeconfig.git.enable { + + sops = { + secrets = { + "git/username" = {}; + "git/email" = {}; + }; + + templates.gitconfig.content = '' + [user] + name = "${config.sops.placeholder."git/username"}" + email = "${config.sops.placeholder."git/email"}" + ''; + }; + + programs.git = { + enable = true; + + includes = [ + { path = "${config.sops.templates.gitconfig.path}"; } + ]; + + extraConfig = { + init = { + defaultBranch = "master"; + }; + url = { + "ssh://gitea@gitea.blunkall.us/" = { + insteadOf = [ + "blunkall:" + ]; + }; + }; + }; + }; + }; +} diff --git a/home-manager/users/nathan/programs/hyprland/default.nix b/home-manager/users/nathan/programs/hyprland/default.nix new file mode 100644 index 0000000..99fea6b --- /dev/null +++ b/home-manager/users/nathan/programs/hyprland/default.nix @@ -0,0 +1,43 @@ +{ config, lib, pkgs, ... }: { + + options.homeconfig.hyprland.enable = lib.options.mkOption { + type = lib.types.bool; + default = false; + }; + + config = lib.mkIf config.homeconfig.hyprland.enable { + + home.sessionVariables.NIX_OZONE_WL = "1"; + + programs.kitty.enable = lib.mkDefault true; + + home.packages = with pkgs; [ + pyprland + ]; + + wayland.windowManager.hyprland = { + + enable = true; + + systemd = { + enable = true; + variables = [ "--all" ]; + }; + + extraConfig = let + monitor = if config.homeconfig.host == "laptop" then '' + monitor=eDP-1,1920x1080@60,0x0,1 + '' else if config.homeconfig.host == "homebox" then '' + monitor=HDMI-A-2,1920x1080@60,0x0,1 + monitor=HEADLESS-2,1920x1080@60,0x0,1 + exec-once=hyprctl output create headless HEADLESS-2 + exec-once=hyprctl keyword monitor HDMI-A-2,disable + exec-once=${pkgs.wayvnc}/bin/wayvnc 0.0.0.0 -o HEADLESS-2 + '' else ''''; + in monitor + '' + source = /home/nathan/.config/hypr/main.conf + ''; + + }; + }; +} diff --git a/home-manager/users/nathan/programs/nh/default.nix b/home-manager/users/nathan/programs/nh/default.nix new file mode 100644 index 0000000..30dd58d --- /dev/null +++ b/home-manager/users/nathan/programs/nh/default.nix @@ -0,0 +1,21 @@ +{ config, lib, ... }: { + + options.homeconfig.nh.enable = lib.options.mkOption { + type = lib.types.bool; + default = false; + }; + + config = lib.mkIf config.homeconfig.nh.enable { + + programs.nh = { + enable = true; + flake = "${config.home.homeDirectory}/Projects/Olympus"; + + clean = { + enable = true; + dates = "weekly"; + extraArgs = "--keep 5 --keep-since 5d"; + }; + }; + }; +} diff --git a/home-manager/users/nathan/programs/pywal/default.nix b/home-manager/users/nathan/programs/pywal/default.nix new file mode 100644 index 0000000..6227aa4 --- /dev/null +++ b/home-manager/users/nathan/programs/pywal/default.nix @@ -0,0 +1,23 @@ +{ config, lib, pkgs, inputs, ... }: { + + options.homeconfig.wal.enable = lib.options.mkOption { + type = lib.types.bool; + default = false; + }; + + config = lib.mkIf config.homeconfig.wal.enable { + + home.packages = with pkgs; [ + + inputs.themecord.packages.${pkgs.system}.default + vesktop + + inputs.nixvim.packages.${pkgs.system}.pywal + + pywal16 + imagemagick + ]; + + + }; +} diff --git a/home-manager/users/nathan/programs/rofi/default.nix b/home-manager/users/nathan/programs/rofi/default.nix new file mode 100644 index 0000000..34814e9 --- /dev/null +++ b/home-manager/users/nathan/programs/rofi/default.nix @@ -0,0 +1,20 @@ +{ config, lib, pkgs, ... }: { + + options.homeconfig.rofi.enable = lib.options.mkOption { + type = lib.types.bool; + default = false; + }; + + config = lib.mkIf config.homeconfig.rofi.enable { + programs.rofi = { + + enable = true; + package = pkgs.rofi-wayland; + + cycle = true; + + theme = "/home/nathan/.cache/wal/colors-rofi-dark.rasi"; + }; + }; +} + diff --git a/home-manager/users/nathan/programs/swaylock/default.nix b/home-manager/users/nathan/programs/swaylock/default.nix new file mode 100644 index 0000000..d2841fb --- /dev/null +++ b/home-manager/users/nathan/programs/swaylock/default.nix @@ -0,0 +1,12 @@ +{ config, lib, pkgs, ... }: { + + options.homeconfig.swaylock.enable = lib.options.mkOption { + type = lib.types.bool; + default = false; + }; + + config = lib.mkIf config.homeconfig.swaylock.enable { + + home.packages = with pkgs; [ swaylock-effects ]; + }; +} diff --git a/home-manager/users/nathan/programs/terminal/bat/default.nix b/home-manager/users/nathan/programs/terminal/bat/default.nix new file mode 100644 index 0000000..2c1f101 --- /dev/null +++ b/home-manager/users/nathan/programs/terminal/bat/default.nix @@ -0,0 +1,18 @@ +{ config, lib, pkgs, ... }: { + + programs.bat = { + + enable = true; + + extraPackages = with pkgs.bat-extras; [ + batman + batpipe + batgrep + batdiff + batwatch + prettybat + ]; + + + }; +} diff --git a/home-manager/users/nathan/programs/terminal/default.nix b/home-manager/users/nathan/programs/terminal/default.nix new file mode 100644 index 0000000..52de2fc --- /dev/null +++ b/home-manager/users/nathan/programs/terminal/default.nix @@ -0,0 +1,12 @@ +{ ... }: { + + imports = [ + ./bat + ./eza + ./fzf + ./tmux + ./kitty + ./zoxide + ./zsh + ]; +} diff --git a/home-manager/users/nathan/programs/terminal/eza/default.nix b/home-manager/users/nathan/programs/terminal/eza/default.nix new file mode 100644 index 0000000..3f6d4a9 --- /dev/null +++ b/home-manager/users/nathan/programs/terminal/eza/default.nix @@ -0,0 +1,17 @@ +{ config, lib, pkgs, ... }: { + + programs.eza = { + + enable = true; + + enableZshIntegration = true; + + extraOptions = [ + "--color=auto" + ]; + + git = true; + + icons = "auto"; + }; +} diff --git a/home-manager/users/nathan/programs/terminal/fzf/default.nix b/home-manager/users/nathan/programs/terminal/fzf/default.nix new file mode 100644 index 0000000..b9b7e6a --- /dev/null +++ b/home-manager/users/nathan/programs/terminal/fzf/default.nix @@ -0,0 +1,15 @@ +{ config, lib, pkgs, ... }: { + + programs.fzf = { + + enable = true; + + enableZshIntegration = true; + + tmux = { + #enableShellIntegration = true; + + #shellIntegrationOptions = []; + }; + }; +} diff --git a/home-manager/users/nathan/programs/terminal/kitty/default.nix b/home-manager/users/nathan/programs/terminal/kitty/default.nix new file mode 100644 index 0000000..ce01540 --- /dev/null +++ b/home-manager/users/nathan/programs/terminal/kitty/default.nix @@ -0,0 +1,33 @@ +{ config, lib, pkgs, ... }: { + + programs.kitty = { + + enable = true; + + font = { + name = "FiraCode Nerd Font"; + size = 12; + }; + + extraConfig = '' + +confirm_os_window_close 0 + +include ${config.home.homeDirectory}/.cache/wal/colors-kitty.conf + +disable_ligatures never + +dynamic_background_opacity yes + +tab_bar_edge top + +map ctrl+shift+t new_tab +map ctrl+shift+w close_tab + +map ctrl+tab next_tab +map ctrl+shift+tab previous_tab + + ''; + }; +} + diff --git a/home-manager/users/nathan/programs/terminal/tmux/default.nix b/home-manager/users/nathan/programs/terminal/tmux/default.nix new file mode 100644 index 0000000..62d73f7 --- /dev/null +++ b/home-manager/users/nathan/programs/terminal/tmux/default.nix @@ -0,0 +1,23 @@ +{ config, lib, pkgs, ... }: { + + programs.tmux = { + + enable = true; + + clock24 = true; + + mouse = true; + + baseIndex = 1; + + keyMode = "vi"; + + prefix = "C-b"; + + shell = "${pkgs.zsh}/bin/zsh"; + + }; + +} + + diff --git a/home-manager/users/nathan/programs/terminal/zoxide/default.nix b/home-manager/users/nathan/programs/terminal/zoxide/default.nix new file mode 100644 index 0000000..afbf058 --- /dev/null +++ b/home-manager/users/nathan/programs/terminal/zoxide/default.nix @@ -0,0 +1,13 @@ +{ config, lib, pkgs, ... }: { + + programs.zoxide = { + + enable = true; + + enableZshIntegration = true; + + options = [ + "--cmd cd" + ]; + }; +} diff --git a/home-manager/users/nathan/programs/terminal/zsh/default.nix b/home-manager/users/nathan/programs/terminal/zsh/default.nix new file mode 100644 index 0000000..a0157e3 --- /dev/null +++ b/home-manager/users/nathan/programs/terminal/zsh/default.nix @@ -0,0 +1,158 @@ +{ config, lib, pkgs, ... }: { + + home.packages = with pkgs; [ + oh-my-posh + ]; + + programs.zsh = { + + enable = true; + + enableCompletion = true; + + autosuggestion.enable = true; + + syntaxHighlighting.enable = true; + + shellAliases = { + ls = "eza"; + ll = "ls -l"; + + ksh = "kitten ssh"; + + vi = "nvim"; + vim = "nvim"; + + }; + + history = { + size = 5000; + ignoreAllDups = true; + ignoreSpace = true; + share = true; + }; + + initContent = if config.homeconfig.wal.enable then (lib.mkBefore '' + cat ${config.home.homeDirectory}/.cache/wal/sequences + eval "$(oh-my-posh init zsh --config ${config.home.homeDirectory}/.cache/wal/ohmyposh.toml)" + '') else (lib.mkBefore '' + eval "$(oh-my-posh init zsh --config ${config.home.homeDirectory}/.config/zsh/ohmyposh.toml)" + ''); + + }; + + home.file.".config/wal/templates/ohmyposh.toml".text = '' +#:schema https://raw.githubusercontent.com/JanDeDobbeleer/oh-my-posh/main/themes/schema.json + +version = 2 +final_space = true +console_title_template = '{{{{ .Shell }}}} in {{{{ .Folder }}}}' + +[[blocks]] + type = 'prompt' + alignment = 'left' + newline = true + + [[blocks.segments]] + type = 'os' + style = 'diamond' + trailing_diamond = '' + background = 'p:c1' + foreground = 'p:c12' + template = ' {{{{ .Icon }}}} ' + + [[blocks.segments]] + type = 'session' + style = 'diamond' + trailing_diamond = '' + background = 'p:c2' + foreground = 'p:c14' + template = '{{{{ .UserName }}}}@{{{{ .HostName }}}}' + + [[blocks.segments]] + type = 'path' + style = 'diamond' + trailing_diamond = '' + background = 'p:c4' + foreground = 'p:c13' + template = '{{{{ .Path }}}}' + + [blocks.segments.properties] + style = 'full' + +[[blocks]] + type = 'prompt' + overflow = 'hidden' + alignment = 'right' + + [[blocks.segments]] + type = 'executiontime' + style = 'diamond' + leading_diamond = '' + background = 'p:c4' + foreground = 'p:c13' + template = '{{{{ .FormattedMs }}}}' + + [[blocks.segments]] + type = 'time' + style = 'diamond' + leading_diamond = '' + background = 'p:c2' + foreground = 'p:c14' + + [[blocks.segments]] + type = 'shell' + style = 'diamond' + leading_diamond = '' + background = 'p:c1' + foreground = 'p:c12' + +[[blocks]] + type = 'prompt' + alignment = 'left' + newline = true + + [[blocks.segments]] + type = 'text' + style = 'plain' + background = 'transparent' + foreground_templates = [ + "{{{{ if gt .Code 0 }}}}p:c13{{{{end}}}}", + "{{{{ if eq .Code 0 }}}}p:c14{{{{end}}}}", + ] + template = "{{{{ if gt .Code 0 }}}}!❭ {{{{else}}}}❭ {{{{end}}}}" + +[transient_prompt] + foreground_templates = [ + "{{{{ if gt .Code 0 }}}}p:c13{{{{end}}}}", + "{{{{ if eq .Code 0 }}}}p:c14{{{{end}}}}", + ] + background = 'transparent' + template = "{{{{ if gt .Code 0 }}}}!❭ {{{{else}}}}❭ {{{{end}}}}" + +[secondary_prompt] + background = 'transparent' + forground = 'p:c14' + template = "❭❭ " + + +[palette] + +c0 = "{color0}" +c1 = "{color1}" +c2 = "{color2}" +c3 = "{color3}" +c4 = "{color4}" +c5 = "{color5}" +c6 = "{color6}" +c7 = "{color7}" +c8 = "{color8}" +c9 = "{color9}" +c10 = "{color10}" +c11 = "{color11}" +c12 = "{color12}" +c13 = "{color13}" +c14 = "{color14}" +c15 = "{color15}" + ''; +} diff --git a/home-manager/users/nathan/secrets.yaml b/home-manager/users/nathan/secrets.yaml new file mode 100644 index 0000000..728d098 --- /dev/null +++ b/home-manager/users/nathan/secrets.yaml @@ -0,0 +1,27 @@ +git: + username: ENC[AES256_GCM,data:418z4cCK,iv:tgPmynsW8fEJs6n+OGfm6IypOjNNhVdVaqFImeKXpC4=,tag:V5zI47vb9FnSO/OWurbJ+A==,type:str] + email: ENC[AES256_GCM,data:xp6HlIO1pTgvrXpGAOQwl0UvcnY4zrLrmw==,iv:LzGkluWeSe8MQqPXQMnNOv062UY+BkQE1fGjGqd/nCg=,tag:Y9nwo+Hjcg4ea2GxGKWApA==,type:str] +sops: + age: + - recipient: age1yqgyp2uxz4lzrc9f9ka0mfjl5fr6ahf8nf24nlmran2wulg6fpvq9hyp9q + enc: | + -----BEGIN AGE ENCRYPTED FILE----- + YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSA3dER2bmZjYUhlNHpvVVNY + dlFYdU1KVzQ0WGhtUlRyRUtMdldqdC9nNm1JCjdJU3pqQ2x2NE52Qm15MUw4d2lv + MjM4V3lBQ1o5MWl2MDRrTlJLWFFHRjAKLS0tIHhpUld3NXh4RzdKajJWMzM2a3gy + VU4xSytSZHgzd3pocUdOZmFTTVg4OXMKPkk9mbu6POQNwy+6jAhgv3t/DAN1n+Jo + xK0s1Ni1FKPU4mvQUsIN2v6y3Nircfr15CfzThjpIBoLtBOyoRhXrw== + -----END AGE ENCRYPTED FILE----- + - recipient: age1640eg0pnmkruc89m5xguz0m8fek44fl4tzez6qwuzlz6kmapqewsp8esxd + enc: | + -----BEGIN AGE ENCRYPTED FILE----- + YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSByM3lvcDM4Z0VJMGVBK1lU + Y0g1bTE2U3ZiN0E3NUJ0QVlQSUdlSDh6NjNNCmRVZjQ4VWJSM3g4S2Q1TnRWbjZG + TVVKUkJTWS9nUGN0Uy9LQ1V0YlpLeWsKLS0tIHRCWkxFTUhNQ21wYVBUL0k4d25h + RWNTdys0VnV1V0ZHL3R1N0NvdGFOTjAKQtM4wMzD9Lr9G9o1sp0Ud7LsxnTXzyV9 + yQ5fxn5lmef7SAPAYVvkU7IH1uhtVyfH9SwsM+EnHdcQWO/lNQp+hg== + -----END AGE ENCRYPTED FILE----- + lastmodified: "2025-08-16T16:08:48Z" + mac: ENC[AES256_GCM,data:3/ztJNXhOIPqgQ47QxjM5KTeAJwXPpUuVtvI5/xJsMOOZhXYRt+uhL584F98rJiMHhnbsuGIZi+jGlYRiE6c+GJ9X7TKLj9yRqKvCMSCdWHGzY721GH5kMPcjD2YDYZ4tt+olIMePNJBPjC1XJgfhfOvs43o2HyDTCS95cEQzB4=,iv:qofZBAwxbTrc/hPyuSi8nxibJ0bGhoytZpUTZwwzbuI=,tag:z1SJXutJmlJ+j6RnV4u29Q==,type:str] + unencrypted_suffix: _unencrypted + version: 3.10.2 diff --git a/home-manager/users/nathan/services/custom/default.nix b/home-manager/users/nathan/services/custom/default.nix new file mode 100644 index 0000000..92e1d82 --- /dev/null +++ b/home-manager/users/nathan/services/custom/default.nix @@ -0,0 +1 @@ +{}: {} diff --git a/home-manager/users/nathan/services/default.nix b/home-manager/users/nathan/services/default.nix new file mode 100644 index 0000000..4ebe959 --- /dev/null +++ b/home-manager/users/nathan/services/default.nix @@ -0,0 +1,6 @@ +{ ... }: { + imports = [ + ./mpd + ./wayvnc + ]; +} diff --git a/home-manager/users/nathan/services/mpd/default.nix b/home-manager/users/nathan/services/mpd/default.nix new file mode 100644 index 0000000..cc5f70b --- /dev/null +++ b/home-manager/users/nathan/services/mpd/default.nix @@ -0,0 +1,41 @@ +{ config, lib, pkgs, ... }: { + + options = { + homeconfig.mpd.enable = lib.options.mkOption { + type = lib.types.bool; + default = false; + }; + }; + + config = lib.mkIf config.homeconfig.mpd.enable { + services.mpd = { + enable = true; + network.startWhenNeeded = true; + network.port = 6600; + network.listenAddress = "127.0.0.1"; + musicDirectory = "/home/nathan/Music"; + extraConfig = '' + audio_output { + type "pipewire" + name "Audio1" + } + audio_output { + type "fifo" + name "visualizer" + path "/tmp/mpd.fifo" + format "44100:16:1" + } + ''; + }; + + services.mpdris2 = { + enable = true; + mpd.host = "127.0.0.1"; + mpd.port = 6600; + package = pkgs.mpdris2; + mpd.musicDirectory = "/home/nathan/Music"; + notifications = true; + }; + }; + +} diff --git a/home-manager/users/nathan/services/wayvnc/default.nix b/home-manager/users/nathan/services/wayvnc/default.nix new file mode 100644 index 0000000..6755e50 --- /dev/null +++ b/home-manager/users/nathan/services/wayvnc/default.nix @@ -0,0 +1,36 @@ +{ config, lib, pkgs, inputs, ... }: { + + options.homeconfig.wayvnc.enable = lib.options.mkOption { + type = lib.types.bool; + default = false; + }; + + disabledModules = [ + ]; + + imports = [ + (import "${inputs.home-manager-us}/modules/services/wayvnc.nix" { + inherit config; + inherit lib; + pkgs = (import inputs.nixpkgs-us { system = "x86_64-linux"; }); + }) + ]; + + config = lib.mkIf config.homeconfig.wayvnc.enable { + home.packages = with pkgs; [ + novnc + ]; + + services.wayvnc = { + enable = true; + + autoStart = true; + + settings = { + address = "0.0.0.0"; + + port = 5900; + }; + }; + }; +} diff --git a/home-manager/users/nix-on-droid/default.nix b/home-manager/users/nix-on-droid/default.nix new file mode 100644 index 0000000..23bf1df --- /dev/null +++ b/home-manager/users/nix-on-droid/default.nix @@ -0,0 +1,47 @@ +{ config, lib, pkgs, inputs, ... }: { + + imports = [ + ./programs + ./services + ./packages + ./dotfiles + ]; + + options.homeconfig = { + host = lib.options.mkOption { + type = lib.types.str; + default = null; + }; + + home-manager.enable = lib.options.mkOption { + type = lib.types.bool; + default = false; + }; + }; + + config = { + + home.stateVersion = "24.11"; + + home.username = "nix-on-droid"; + + home.homeDirectory = "/data/data/com.termux.nix/files/home"; + + nix = { + package = pkgs.nix; + + nixPath = [ + "nixpkgs=${inputs.nixpkgs}" + ]; + + settings = { + experimental-features = [ "nix-command" "flakes" ]; + }; + }; + + programs.ssh.enable = true; + + programs.home-manager.enable = config.homeconfig.home-manager.enable; + + }; +} diff --git a/home-manager/users/nix-on-droid/dotfiles/Wallpaper/bluescape.jpg b/home-manager/users/nix-on-droid/dotfiles/Wallpaper/bluescape.jpg new file mode 100644 index 0000000..e55732d Binary files /dev/null and b/home-manager/users/nix-on-droid/dotfiles/Wallpaper/bluescape.jpg differ diff --git a/home-manager/users/nix-on-droid/dotfiles/Wallpaper/galaxy.jpg b/home-manager/users/nix-on-droid/dotfiles/Wallpaper/galaxy.jpg new file mode 100755 index 0000000..a2771c3 Binary files /dev/null and b/home-manager/users/nix-on-droid/dotfiles/Wallpaper/galaxy.jpg differ diff --git a/home-manager/users/nix-on-droid/dotfiles/Wallpaper/kurisu.gif b/home-manager/users/nix-on-droid/dotfiles/Wallpaper/kurisu.gif new file mode 100644 index 0000000..6b19557 Binary files /dev/null and b/home-manager/users/nix-on-droid/dotfiles/Wallpaper/kurisu.gif differ diff --git a/home-manager/users/nix-on-droid/dotfiles/Wallpaper/kurisu.jpg b/home-manager/users/nix-on-droid/dotfiles/Wallpaper/kurisu.jpg new file mode 100644 index 0000000..3149f64 Binary files /dev/null and b/home-manager/users/nix-on-droid/dotfiles/Wallpaper/kurisu.jpg differ diff --git a/home-manager/users/nix-on-droid/dotfiles/Wallpaper/llenn.png b/home-manager/users/nix-on-droid/dotfiles/Wallpaper/llenn.png new file mode 100644 index 0000000..5f7c800 Binary files /dev/null and b/home-manager/users/nix-on-droid/dotfiles/Wallpaper/llenn.png differ diff --git a/home-manager/users/nix-on-droid/dotfiles/Wallpaper/megumin.png b/home-manager/users/nix-on-droid/dotfiles/Wallpaper/megumin.png new file mode 100644 index 0000000..b616d1d Binary files /dev/null and b/home-manager/users/nix-on-droid/dotfiles/Wallpaper/megumin.png differ diff --git a/home-manager/users/nix-on-droid/dotfiles/Wallpaper/megumin1.gif b/home-manager/users/nix-on-droid/dotfiles/Wallpaper/megumin1.gif new file mode 100644 index 0000000..f733c6d Binary files /dev/null and b/home-manager/users/nix-on-droid/dotfiles/Wallpaper/megumin1.gif differ diff --git a/home-manager/users/nix-on-droid/dotfiles/Wallpaper/megumin2.gif b/home-manager/users/nix-on-droid/dotfiles/Wallpaper/megumin2.gif new file mode 100644 index 0000000..d7b790a Binary files /dev/null and b/home-manager/users/nix-on-droid/dotfiles/Wallpaper/megumin2.gif differ diff --git a/home-manager/users/nix-on-droid/dotfiles/Wallpaper/ngnl.jpg b/home-manager/users/nix-on-droid/dotfiles/Wallpaper/ngnl.jpg new file mode 100644 index 0000000..6091d86 Binary files /dev/null and b/home-manager/users/nix-on-droid/dotfiles/Wallpaper/ngnl.jpg differ diff --git a/home-manager/users/nix-on-droid/dotfiles/Wallpaper/orangescape.jpg b/home-manager/users/nix-on-droid/dotfiles/Wallpaper/orangescape.jpg new file mode 100644 index 0000000..c107dfa Binary files /dev/null and b/home-manager/users/nix-on-droid/dotfiles/Wallpaper/orangescape.jpg differ diff --git a/home-manager/users/nix-on-droid/dotfiles/Wallpaper/rezero.gif b/home-manager/users/nix-on-droid/dotfiles/Wallpaper/rezero.gif new file mode 100644 index 0000000..04e0ec9 Binary files /dev/null and b/home-manager/users/nix-on-droid/dotfiles/Wallpaper/rezero.gif differ diff --git a/home-manager/users/nix-on-droid/dotfiles/Wallpaper/sao.gif b/home-manager/users/nix-on-droid/dotfiles/Wallpaper/sao.gif new file mode 100644 index 0000000..2e4bf6f Binary files /dev/null and b/home-manager/users/nix-on-droid/dotfiles/Wallpaper/sao.gif differ diff --git a/home-manager/users/nix-on-droid/dotfiles/Wallpaper/sao.png b/home-manager/users/nix-on-droid/dotfiles/Wallpaper/sao.png new file mode 100644 index 0000000..b282367 Binary files /dev/null and b/home-manager/users/nix-on-droid/dotfiles/Wallpaper/sao.png differ diff --git a/home-manager/users/nix-on-droid/dotfiles/Wallpaper/sinon.gif b/home-manager/users/nix-on-droid/dotfiles/Wallpaper/sinon.gif new file mode 100644 index 0000000..c7a52c9 Binary files /dev/null and b/home-manager/users/nix-on-droid/dotfiles/Wallpaper/sinon.gif differ diff --git a/home-manager/users/nix-on-droid/dotfiles/default.nix b/home-manager/users/nix-on-droid/dotfiles/default.nix new file mode 100644 index 0000000..50c8cfc --- /dev/null +++ b/home-manager/users/nix-on-droid/dotfiles/default.nix @@ -0,0 +1,8 @@ +{ config, lib, ... }: { + + home.file = { + ".config/wal/templates" = { source = ./wal/templates; recursive = true; }; + "Pictures/Wallpaper" = { source = ./Wallpaper; recursive = true; }; + }; + +} diff --git a/home-manager/users/nix-on-droid/dotfiles/wal/templates/cava_config b/home-manager/users/nix-on-droid/dotfiles/wal/templates/cava_config new file mode 100644 index 0000000..b85c4df --- /dev/null +++ b/home-manager/users/nix-on-droid/dotfiles/wal/templates/cava_config @@ -0,0 +1,279 @@ +## Configuration file for CAVA. +# Remove the ; to change parameters. + + +[general] + +# Smoothing mode. Can be 'normal', 'scientific' or 'waves'. DEPRECATED as of 0.6.0 +; mode = normal + +# Accepts only non-negative values. +; framerate = 60 + +# 'autosens' will attempt to decrease sensitivity if the bars peak. 1 = on, 0 = off +# new as of 0.6.0 autosens of low values (dynamic range) +# 'overshoot' allows bars to overshoot (in % of terminal height) without initiating autosens. DEPRECATED as of 0.6.0 +; autosens = 1 +; overshoot = 20 + +# Manual sensitivity in %. If autosens is enabled, this will only be the initial value. +# 200 means double height. Accepts only non-negative values. +; sensitivity = 100 + +# The number of bars (0-512). 0 sets it to auto (fill up console). +# Bars' width and space between bars in number of characters. +; bars = 0 +; bar_width = 2 +; bar_spacing = 1 +# bar_height is only used for output in "noritake" format +; bar_height = 32 + +# For SDL width and space between bars is in pixels, defaults are: +; bar_width = 20 +; bar_spacing = 5 + +# sdl_glsl have these default values, they are only used to calulate max number of bars. +; bar_width = 1 +; bar_spacing = 0 + + +# Lower and higher cutoff frequencies for lowest and highest bars +# the bandwidth of the visualizer. +# Note: there is a minimum total bandwidth of 43Mhz x number of bars. +# Cava will automatically increase the higher cutoff if a too low band is specified. +; lower_cutoff_freq = 50 +; higher_cutoff_freq = 10000 + + +# Seconds with no input before cava goes to sleep mode. Cava will not perform FFT or drawing and +# only check for input once per second. Cava will wake up once input is detected. 0 = disable. +; sleep_timer = 0 + + +[input] + +# Audio capturing method. Possible methods are: 'fifo', 'portaudio', 'pipewire', 'alsa', 'pulse', 'sndio', 'oss', 'jack' or 'shmem' +# Defaults to 'oss', 'pipewire', 'sndio', 'jack', 'pulse', 'alsa', 'portaudio' or 'fifo', in that order, dependent on what support cava was built with. +# On Mac it defaults to 'portaudio' or 'fifo' +# On windows this is automatic and no input settings are needed. +# +# All input methods uses the same config variable 'source' +# to define where it should get the audio. +# +# For pulseaudio and pipewire 'source' will be the source. Default: 'auto', which uses the monitor source of the default sink +# (all pulseaudio sinks(outputs) have 'monitor' sources(inputs) associated with them). +# +# For pipewire 'source' will be the object name or object.serial of the device to capture from. +# Both input and output devices are supported. +# +# For alsa 'source' will be the capture device. +# For fifo 'source' will be the path to fifo-file. +# For shmem 'source' will be /squeezelite-AA:BB:CC:DD:EE:FF where 'AA:BB:CC:DD:EE:FF' will be squeezelite's MAC address +# +# For sndio 'source' will be a raw recording audio descriptor or a monitoring sub-device, e.g. 'rsnd/2' or 'snd/1'. Default: 'default'. +# README.md contains further information on how to setup CAVA for sndio. +# +# For oss 'source' will be the path to a audio device, e.g. '/dev/dsp2'. Default: '/dev/dsp', i.e. the default audio device. +# README.md contains further information on how to setup CAVA for OSS on FreeBSD. +# +# For jack 'source' will be the name of the JACK server to connect to, e.g. 'foobar'. Default: 'default'. +# README.md contains further information on how to setup CAVA for JACK. +# +; method = pulse +; source = auto + +; method = pipewire +; source = auto + +; method = alsa +; source = hw:Loopback,1 + +; method = fifo +; source = /tmp/mpd.fifo + +; method = shmem +; source = /squeezelite-AA:BB:CC:DD:EE:FF + +; method = portaudio +; source = auto + +; method = sndio +; source = default + +; method = oss +; source = /dev/dsp + +; method = jack +; source = default + +# The options 'sample_rate', 'sample_bits', 'channels' and 'autoconnect' can be configured for some input methods: +# sample_rate: fifo, pipewire, sndio, oss +# sample_bits: fifo, pipewire, sndio, oss +# channels: sndio, oss, jack +# autoconnect: jack +# Other methods ignore these settings. +# +# For 'sndio' and 'oss' they are only preferred values, i.e. if the values are not supported +# by the chosen audio device, the device will use other supported values instead. +# Example: 48000, 32 and 2, but the device only supports 44100, 16 and 1, then it +# will use 44100, 16 and 1. +# +; sample_rate = 44100 +; sample_bits = 16 +; channels = 2 +; autoconnect = 2 + + +[output] + +# Output method. Can be 'ncurses', 'noncurses', 'raw', 'noritake', 'sdl' +# or 'sdl_glsl'. +# 'noncurses' (default) uses a buffer and cursor movements to only print +# changes from frame to frame in the terminal. Uses less resources and is less +# prone to tearing (vsync issues) than 'ncurses'. +# +# 'raw' is an 8 or 16 bit (configurable via the 'bit_format' option) data +# stream of the bar heights that can be used to send to other applications. +# 'raw' defaults to 200 bars, which can be adjusted in the 'bars' option above. +# +# 'noritake' outputs a bitmap in the format expected by a Noritake VFD display +# in graphic mode. It only support the 3000 series graphical VFDs for now. +# +# 'sdl' uses the Simple DirectMedia Layer to render in a graphical context. +# 'sdl_glsl' uses SDL to create an OpenGL context. Write your own shaders or +# use one of the predefined ones. +; method = noncurses + +# Orientation of the visualization. Can be 'bottom', 'top', 'left' or 'right'. +# Default is 'bottom'. Other orientations are only supported on sdl and ncruses +# output. Note: many fonts have weird glyphs for 'top' and 'right' characters, +# which can make ncurses not look right. +; orientation = bottom + +# Visual channels. Can be 'stereo' or 'mono'. +# 'stereo' mirrors both channels with low frequencies in center. +# 'mono' outputs left to right lowest to highest frequencies. +# 'mono_option' set mono to either take input from 'left', 'right' or 'average'. +# set 'reverse' to 1 to display frequencies the other way around. +; channels = stereo +; mono_option = average +; reverse = 0 + +# Raw output target. A fifo will be created if target does not exist. +; raw_target = /dev/stdout + +# Raw data format. Can be 'binary' or 'ascii'. +; data_format = binary + +# Binary bit format, can be '8bit' (0-255) or '16bit' (0-65530). +; bit_format = 16bit + +# Ascii max value. In 'ascii' mode range will run from 0 to value specified here +; ascii_max_range = 1000 + +# Ascii delimiters. In ascii format each bar and frame is separated by a delimiters. +# Use decimal value in ascii table (i.e. 59 = ';' and 10 = '\n' (line feed)). +; bar_delimiter = 59 +; frame_delimiter = 10 + +# sdl window size and position. -1,-1 is centered. +; sdl_width = 1000 +; sdl_height = 500 +; sdl_x = -1 +; sdl_y= -1 +; sdl_full_screen = 0 + +# set label on bars on the x-axis. Can be 'frequency' or 'none'. Default: 'none' +# 'frequency' displays the lower cut off frequency of the bar above. +# Only supported on ncurses and noncurses output. +; xaxis = none + +# enable alacritty synchronized updates. 1 = on, 0 = off +# removes flickering in alacritty terminal emulator. +# defaults to off since the behaviour in other terminal emulators is unknown +; alacritty_sync = 0 + +# Shaders for sdl_glsl, located in $HOME/.config/cava/shaders +; vertex_shader = pass_through.vert +; fragment_shader = bar_spectrum.frag + +; for glsl output mode, keep rendering even if no audio +; continuous_rendering = 0 + +# disable console blank (screen saver) in tty +# (Not supported on FreeBSD) +; disable_blanking = 0 + +# show a flat bar at the bottom of the screen when idle, 1 = on, 0 = off +; show_idle_bar_heads = 1 + +# show waveform instead of frequency spectrum, 1 = on, 0 = off +; waveform = 0 + +[color] + +# Colors can be one of seven predefined: black, blue, cyan, green, magenta, red, white, yellow. +# Or defined by hex code '#xxxxxx' (hex code must be within ''). User defined colors requires +# a terminal that can change color definitions such as Gnome-terminal or rxvt. +# default is to keep current terminal color +; background = default +; foreground = default + +# SDL and sdl_glsl only support hex code colors, these are the default: +; background = '#111111' +; foreground = '#33ffff' + + +# Gradient mode, only hex defined colors are supported, +# background must also be defined in hex or remain commented out. 1 = on, 0 = off. +# You can define as many as 8 different colors. They range from bottom to top of screen + gradient = 1 + gradient_count = 8 + gradient_color_1 = '{color1}' + gradient_color_2 = '{color2}' + gradient_color_3 = '{color3}' + gradient_color_4 = '{color4}' + gradient_color_5 = '{color5}' + gradient_color_6 = '{color6}' + gradient_color_7 = '{color7}' + gradient_color_8 = '{color8}' + + + +[smoothing] + +# Percentage value for integral smoothing. Takes values from 0 - 100. +# Higher values means smoother, but less precise. 0 to disable. +# DEPRECATED as of 0.8.0, use noise_reduction instead +; integral = 77 + +# Disables or enables the so-called "Monstercat smoothing" with or without "waves". Set to 0 to disable. +; monstercat = 0 +; waves = 0 + +# Set gravity percentage for "drop off". Higher values means bars will drop faster. +# Accepts only non-negative values. 50 means half gravity, 200 means double. Set to 0 to disable "drop off". +# DEPRECATED as of 0.8.0, use noise_reduction instead +; gravity = 100 + + +# In bar height, bars that would have been lower that this will not be drawn. +# DEPRECATED as of 0.8.0 +; ignore = 0 + +# Noise reduction, int 0 - 100. default 77 +# the raw visualization is very noisy, this factor adjusts the integral and gravity filters to keep the signal smooth +# 100 will be very slow and smooth, 0 will be fast but noisy. +; noise_reduction = 77 + + +[eq] + +# This one is tricky. You can have as much keys as you want. +# Remember to uncomment more than one key! More keys = more precision. +# Look at readme.md on github for further explanations and examples. +; 1 = 1 # bass +; 2 = 1 +; 3 = 1 # midtone +; 4 = 1 +; 5 = 1 # treble diff --git a/home-manager/users/nix-on-droid/packages/default.nix b/home-manager/users/nix-on-droid/packages/default.nix new file mode 100644 index 0000000..f6645a1 --- /dev/null +++ b/home-manager/users/nix-on-droid/packages/default.nix @@ -0,0 +1,68 @@ +{ config, lib, pkgs, inputs, ... }: let + system = "x86_64-linux"; + + pkgs-us = import inputs.nixpkgs-us { + inherit system; + config.allowUnfree = true; + }; + + in { + + imports = [ + ./scripts + ]; + + options.homeconfig.minimal = lib.options.mkOption { + type = lib.types.bool; + default = false; + }; + + config = lib.mkMerge [ + + { + home.packages = with pkgs; [ + killall + zip + unzip + gcc + zulu + rsync + git + openssh + ]; + } + + (lib.mkIf (!config.homeconfig.minimal) { + + nixpkgs.config = { + allowUnfree = true; + }; + + home.packages = with pkgs; let + pypkgs = ps: with ps; [ + numpy + pandas + torch + torchvision + torchaudio + transformers + datasets + pyaudio + faster-whisper + pyusb + ]; + + in [ + + cava + neovim-remote + + (pkgs.python311.withPackages pypkgs) + + neofetch + ]; + + }) + ]; + +} diff --git a/home-manager/users/nix-on-droid/packages/scripts/default.nix b/home-manager/users/nix-on-droid/packages/scripts/default.nix new file mode 100644 index 0000000..417f04c --- /dev/null +++ b/home-manager/users/nix-on-droid/packages/scripts/default.nix @@ -0,0 +1,97 @@ +{ config, lib, pkgs, ... }: { + + options = { + homeScripts.enable = lib.options.mkOption { + type = lib.types.bool; + default = true; + }; + }; + + config = lib.mkIf config.homeScripts.enable { + home.packages = [ + + #scripts + (pkgs.writeShellScriptBin "_systemRebuild" '' + ${pkgs.nh}/bin/nh os switch --ask /home/nathan/Projects/System + echo //////Enter to close////// + read + '') + (pkgs.writeShellScriptBin "_homeRebuild" '' + ${pkgs.nh}/bin/nh home switch --ask /home/nathan/Projects/System + echo //////Enter to close////// + read + '') + + (pkgs.writeShellScriptBin "randWallpaper" '' + file=$(ls /home/nathan/Pictures/Wallpaper/ | shuf -n 1) + setWallpaper /home/nathan/Pictures/Wallpaper/$file + '') + + (pkgs.writeShellScriptBin "setWallpaper" '' + img=''$(realpath ''${1:-~/.cache/bg}) + p=''$(ps -e | grep mpvpaper | sed -n -e "s/ *//" -e "s/ /\n/" -e "1 P") + ${pkgs.mpvpaper}/bin/mpvpaper -f -o "loop" '*' $img && \ + changeColors $img $2 && \ + sleep 0.4 && \ + kill $p + '') + + (pkgs.writeShellScriptBin "changeColors" '' + + if [[ $(ls ~/.cache/ | grep bga) != bga ]]; then + echo 100 > ~/.cache/bga + fi + + alpha=''${2:-`cat ~/.cache/bga`} + + img=''$(realpath ''${1:-~/.cache/bg}) + + if [[ $alpha -lt 0 ]]; then + $alpha=0 + fi + + if [[ $alpha -gt 100 ]]; then + $alpha=100 + fi + + wal -i $img -a $alpha --cols16 -n + + echo $alpha > ~/.cache/bga + + rm ~/.cache/bg + ln -s $img ~/.cache/bg + + sleep 0.4 + + pywalfox update & + + themecord > ~/.cache/_.txt && rm ~/.cache/_.txt + + [[ $(pidof cava) != "" ]] && pkill -USR1 cava & + + for i in $(ls /run/user/1000 | grep nvim); do nvr -s --servername /run/user/1000/$i --remote-send 'colorscheme pywal'; done + + pkill -USR1 kitty + '') + + (pkgs.writeShellScriptBin "onSystemStart" '' + randWallpaper & + ags & + pypr & + lxqt-policykit-agent & + # nmcli device wifi connect EagleNet password '~?C#@ZiH' & + hyprctl setcursor Bibata-Modern-Classic 16 & + wayvnc & + hyprctl reload & + novnc & + '') + + (pkgs.writeShellScriptBin "colorPrefix" '' + exec -a "$0" "$@" & + sleep 0.4 && changeColors & + '') + + ]; + }; +} + diff --git a/home-manager/users/nix-on-droid/programs/calcurse/default.nix b/home-manager/users/nix-on-droid/programs/calcurse/default.nix new file mode 100644 index 0000000..b63913b --- /dev/null +++ b/home-manager/users/nix-on-droid/programs/calcurse/default.nix @@ -0,0 +1,14 @@ +{ config, lib, pkgs, ... }: { + + options.homeconfig.calcurse.enable = lib.options.mkOption { + type = lib.types.bool; + default = false; + }; + + config = lib.mkIf config.homeconfig.calcurse.enable { + home.packages = with pkgs; [ + calcurse + libnotify + ]; + }; +} diff --git a/home-manager/users/nix-on-droid/programs/default.nix b/home-manager/users/nix-on-droid/programs/default.nix new file mode 100644 index 0000000..aeb767b --- /dev/null +++ b/home-manager/users/nix-on-droid/programs/default.nix @@ -0,0 +1,17 @@ +{ config, lib, pkgs, inputs, ... }: { + + imports = [ + ./terminal + ./pywal + ./calcurse + ]; + + config = { + + home.packages = [ + inputs.nixvim.packages.${pkgs.system}.default + ]; + + home.sessionVariables.EDITOR = "nvim"; + }; +} diff --git a/home-manager/users/nix-on-droid/programs/pywal/default.nix b/home-manager/users/nix-on-droid/programs/pywal/default.nix new file mode 100644 index 0000000..843ad5f --- /dev/null +++ b/home-manager/users/nix-on-droid/programs/pywal/default.nix @@ -0,0 +1,15 @@ +{ config, lib, pkgs, inputs, ... }: { + + options.homeconfig.wal.enable = lib.options.mkOption { + type = lib.types.bool; + default = false; + }; + + config = lib.mkIf config.homeconfig.wal.enable { + + home.packages = with pkgs; [ + pywal16 + imagemagick + ]; + }; +} diff --git a/home-manager/users/nix-on-droid/programs/terminal/bat/default.nix b/home-manager/users/nix-on-droid/programs/terminal/bat/default.nix new file mode 100644 index 0000000..2c1f101 --- /dev/null +++ b/home-manager/users/nix-on-droid/programs/terminal/bat/default.nix @@ -0,0 +1,18 @@ +{ config, lib, pkgs, ... }: { + + programs.bat = { + + enable = true; + + extraPackages = with pkgs.bat-extras; [ + batman + batpipe + batgrep + batdiff + batwatch + prettybat + ]; + + + }; +} diff --git a/home-manager/users/nix-on-droid/programs/terminal/default.nix b/home-manager/users/nix-on-droid/programs/terminal/default.nix new file mode 100644 index 0000000..52de2fc --- /dev/null +++ b/home-manager/users/nix-on-droid/programs/terminal/default.nix @@ -0,0 +1,12 @@ +{ ... }: { + + imports = [ + ./bat + ./eza + ./fzf + ./tmux + ./kitty + ./zoxide + ./zsh + ]; +} diff --git a/home-manager/users/nix-on-droid/programs/terminal/eza/default.nix b/home-manager/users/nix-on-droid/programs/terminal/eza/default.nix new file mode 100644 index 0000000..3f6d4a9 --- /dev/null +++ b/home-manager/users/nix-on-droid/programs/terminal/eza/default.nix @@ -0,0 +1,17 @@ +{ config, lib, pkgs, ... }: { + + programs.eza = { + + enable = true; + + enableZshIntegration = true; + + extraOptions = [ + "--color=auto" + ]; + + git = true; + + icons = "auto"; + }; +} diff --git a/home-manager/users/nix-on-droid/programs/terminal/fzf/default.nix b/home-manager/users/nix-on-droid/programs/terminal/fzf/default.nix new file mode 100644 index 0000000..b9b7e6a --- /dev/null +++ b/home-manager/users/nix-on-droid/programs/terminal/fzf/default.nix @@ -0,0 +1,15 @@ +{ config, lib, pkgs, ... }: { + + programs.fzf = { + + enable = true; + + enableZshIntegration = true; + + tmux = { + #enableShellIntegration = true; + + #shellIntegrationOptions = []; + }; + }; +} diff --git a/home-manager/users/nix-on-droid/programs/terminal/kitty/default.nix b/home-manager/users/nix-on-droid/programs/terminal/kitty/default.nix new file mode 100644 index 0000000..ce01540 --- /dev/null +++ b/home-manager/users/nix-on-droid/programs/terminal/kitty/default.nix @@ -0,0 +1,33 @@ +{ config, lib, pkgs, ... }: { + + programs.kitty = { + + enable = true; + + font = { + name = "FiraCode Nerd Font"; + size = 12; + }; + + extraConfig = '' + +confirm_os_window_close 0 + +include ${config.home.homeDirectory}/.cache/wal/colors-kitty.conf + +disable_ligatures never + +dynamic_background_opacity yes + +tab_bar_edge top + +map ctrl+shift+t new_tab +map ctrl+shift+w close_tab + +map ctrl+tab next_tab +map ctrl+shift+tab previous_tab + + ''; + }; +} + diff --git a/home-manager/users/nix-on-droid/programs/terminal/tmux/default.nix b/home-manager/users/nix-on-droid/programs/terminal/tmux/default.nix new file mode 100644 index 0000000..62d73f7 --- /dev/null +++ b/home-manager/users/nix-on-droid/programs/terminal/tmux/default.nix @@ -0,0 +1,23 @@ +{ config, lib, pkgs, ... }: { + + programs.tmux = { + + enable = true; + + clock24 = true; + + mouse = true; + + baseIndex = 1; + + keyMode = "vi"; + + prefix = "C-b"; + + shell = "${pkgs.zsh}/bin/zsh"; + + }; + +} + + diff --git a/home-manager/users/nix-on-droid/programs/terminal/zoxide/default.nix b/home-manager/users/nix-on-droid/programs/terminal/zoxide/default.nix new file mode 100644 index 0000000..afbf058 --- /dev/null +++ b/home-manager/users/nix-on-droid/programs/terminal/zoxide/default.nix @@ -0,0 +1,13 @@ +{ config, lib, pkgs, ... }: { + + programs.zoxide = { + + enable = true; + + enableZshIntegration = true; + + options = [ + "--cmd cd" + ]; + }; +} diff --git a/home-manager/users/nix-on-droid/programs/terminal/zsh/default.nix b/home-manager/users/nix-on-droid/programs/terminal/zsh/default.nix new file mode 100644 index 0000000..5fdd097 --- /dev/null +++ b/home-manager/users/nix-on-droid/programs/terminal/zsh/default.nix @@ -0,0 +1,156 @@ +{ config, lib, pkgs, ... }: { + + home.packages = with pkgs; [ + oh-my-posh + ]; + + programs.zsh = { + + enable = true; + + enableCompletion = true; + + autosuggestion.enable = true; + + syntaxHighlighting.enable = true; + + shellAliases = { + ls = "eza"; + ll = "ls -l"; + + ksh = "kitten ssh"; + + vi = "nvim"; + vim = "nvim"; + + }; + + history = { + size = 5000; + ignoreAllDups = true; + ignoreSpace = true; + share = true; + }; + + initExtraFirst = '' + cat ${config.home.homeDirectory}/.cache/wal/sequences + eval "$(oh-my-posh init zsh --config ${config.home.homeDirectory}/.cache/wal/ohmyposh.toml)" + ''; + + }; + + home.file.".config/wal/templates/ohmyposh.toml".text = '' +#:schema https://raw.githubusercontent.com/JanDeDobbeleer/oh-my-posh/main/themes/schema.json + +version = 2 +final_space = true +console_title_template = '{{{{ .Shell }}}} in {{{{ .Folder }}}}' + +[[blocks]] + type = 'prompt' + alignment = 'left' + newline = true + + [[blocks.segments]] + type = 'os' + style = 'diamond' + trailing_diamond = '' + background = 'p:c1' + foreground = 'p:c12' + template = ' {{{{ .Icon }}}} ' + + [[blocks.segments]] + type = 'session' + style = 'diamond' + trailing_diamond = '' + background = 'p:c2' + foreground = 'p:c14' + template = '{{{{ .UserName }}}}@{{{{ .HostName }}}}' + + [[blocks.segments]] + type = 'path' + style = 'diamond' + trailing_diamond = '' + background = 'p:c4' + foreground = 'p:c13' + template = '{{{{ .Path }}}}' + + [blocks.segments.properties] + style = 'full' + +[[blocks]] + type = 'prompt' + overflow = 'hidden' + alignment = 'right' + + [[blocks.segments]] + type = 'executiontime' + style = 'diamond' + leading_diamond = '' + background = 'p:c4' + foreground = 'p:c13' + template = '{{{{ .FormattedMs }}}}' + + [[blocks.segments]] + type = 'time' + style = 'diamond' + leading_diamond = '' + background = 'p:c2' + foreground = 'p:c14' + + [[blocks.segments]] + type = 'shell' + style = 'diamond' + leading_diamond = '' + background = 'p:c1' + foreground = 'p:c12' + +[[blocks]] + type = 'prompt' + alignment = 'left' + newline = true + + [[blocks.segments]] + type = 'text' + style = 'plain' + background = 'transparent' + foreground_templates = [ + "{{{{ if gt .Code 0 }}}}p:c13{{{{end}}}}", + "{{{{ if eq .Code 0 }}}}p:c14{{{{end}}}}", + ] + template = "{{{{ if gt .Code 0 }}}}!❭ {{{{else}}}}❭ {{{{end}}}}" + +[transient_prompt] + foreground_templates = [ + "{{{{ if gt .Code 0 }}}}p:c13{{{{end}}}}", + "{{{{ if eq .Code 0 }}}}p:c14{{{{end}}}}", + ] + background = 'transparent' + template = "{{{{ if gt .Code 0 }}}}!❭ {{{{else}}}}❭ {{{{end}}}}" + +[secondary_prompt] + background = 'transparent' + forground = 'p:c14' + template = "❭❭ " + + +[palette] + +c0 = "{color0}" +c1 = "{color1}" +c2 = "{color2}" +c3 = "{color3}" +c4 = "{color4}" +c5 = "{color5}" +c6 = "{color6}" +c7 = "{color7}" +c8 = "{color8}" +c9 = "{color9}" +c10 = "{color10}" +c11 = "{color11}" +c12 = "{color12}" +c13 = "{color13}" +c14 = "{color14}" +c15 = "{color15}" + ''; +} diff --git a/home-manager/users/nix-on-droid/services/custom/default.nix b/home-manager/users/nix-on-droid/services/custom/default.nix new file mode 100644 index 0000000..92e1d82 --- /dev/null +++ b/home-manager/users/nix-on-droid/services/custom/default.nix @@ -0,0 +1 @@ +{}: {} diff --git a/home-manager/users/nix-on-droid/services/default.nix b/home-manager/users/nix-on-droid/services/default.nix new file mode 100644 index 0000000..7af78d4 --- /dev/null +++ b/home-manager/users/nix-on-droid/services/default.nix @@ -0,0 +1,4 @@ +{ ... }: { + imports = [ + ]; +}