diff --git a/home/programs/graphical/wms/hyprland/config/style.nix b/home/programs/graphical/wms/hyprland/config/style.nix index 12f25ee..d3cdedf 100644 --- a/home/programs/graphical/wms/hyprland/config/style.nix +++ b/home/programs/graphical/wms/hyprland/config/style.nix @@ -101,7 +101,7 @@ dim_inactive = false; # disabled for now dim_strength = 0.02; dim_special = 0.2; - inactive_opacity = 0.9; + #inactive_opacity = 0.9; }; # diff --git a/home/programs/terminal/coding/python/default.nix b/home/programs/terminal/coding/python/default.nix index 1bf124b..0241592 100644 --- a/home/programs/terminal/coding/python/default.nix +++ b/home/programs/terminal/coding/python/default.nix @@ -1,6 +1,5 @@ { imports = [ - ./python.nix ./ipython.nix ./poetry.nix ./rye.nix diff --git a/home/programs/terminal/coding/python/python.nix b/home/programs/terminal/coding/python/python.nix deleted file mode 100644 index f4628e2..0000000 --- a/home/programs/terminal/coding/python/python.nix +++ /dev/null @@ -1,14 +0,0 @@ -{ - lib, - pkgs, - osConfig, - ... -}: let - inherit (lib) mkIf; - - cfg = osConfig.myOptions.home-manager.programs.coding.python; -in { - config = mkIf cfg.enable { - home.packages = with pkgs; [ python312 ]; - }; -} diff --git a/home/programs/terminal/coding/python/rye.nix b/home/programs/terminal/coding/python/rye.nix index 5e06e4c..3ac8e9a 100644 --- a/home/programs/terminal/coding/python/rye.nix +++ b/home/programs/terminal/coding/python/rye.nix @@ -1,14 +1,38 @@ { lib, pkgs, + config, osConfig, ... }: let inherit (lib) mkIf; cfg = osConfig.myOptions.home-manager.programs.coding.python; + + toTOML = name: (pkgs.formats.toml {}).generate "${name}"; in { config = mkIf cfg.enable { - home.packages = with pkgs; [ rye ]; + home = { + packages = with pkgs; [ rye ]; + + sessionVariables = { + RYE_HOME = "${config.xdg.configHome}/rye"; + }; + + # Add rye python shims to path. + # Rye provides python executables that will automatically pick up on the python + # from a virtual environment, if we're in a directory (project) with one. If not, + # rye will fall back to system python. That is, if behavior.global-python=false, + # otherwise, we can actually use a python version from rye as our global python. + sessionPath = [ + "${config.xdg.configHome}/rye/shims" + ]; + }; + + # see: + xdg.configFile."rye/config.toml".source = toTOML "config.toml" { + default.license = "GPL-3.0-or-later"; + behavior.global-python=true; + }; }; } diff --git a/home/programs/terminal/tools/ssh.nix b/home/programs/terminal/tools/ssh.nix index 2946298..149c0fb 100644 --- a/home/programs/terminal/tools/ssh.nix +++ b/home/programs/terminal/tools/ssh.nix @@ -13,12 +13,12 @@ "gitlab" = { user = "git"; hostname = "gitlab.com"; - identityFile = "~/.ssh/git/gitlab"; + identityFile = "~/.ssh/git/gitlab-itsdrike"; }; "github" = { user = "git"; hostname = "gitlab.com"; - identityFile = "~/.ssh/git/github"; + identityFile = "~/.ssh/git/github-itsdrike"; }; # TODO: Figure out how to add protected/encrypted blocks here # I don't like the idea of expising IPs/hostnames in the config diff --git a/home/programs/xdg/config-files.nix b/home/programs/xdg/config-files.nix index b16ce44..18c1abf 100644 --- a/home/programs/xdg/config-files.nix +++ b/home/programs/xdg/config-files.nix @@ -57,34 +57,34 @@ in { ''; "python/pythonrc.py".text = '' - import atexit - import os - import readline - from functools import partial - from pathlib import Path - from types import ModuleType - - cache_xdg_dir = Path( - os.environ.get("XDG_CACHE_HOME", str(Path("~/.cache").expanduser())) - ) - cache_xdg_dir.mkdir(exist_ok=True, parents=True) - - history_file = cache_xdg_dir.joinpath("python_history") - history_file.touch() - - readline.read_history_file(history_file) + def is_vanilla() -> bool: + import sys + return not hasattr(__builtins__, '__IPYTHON__') and 'bpython' not in sys.argv[0] - def write_history(readline: ModuleType, history_file: Path) -> None: - """ - We need to get ``readline`` and ``history_file`` as arguments, as it - seems they get garbage collected when the function is registered and - the program ends, even though we refer to them here. - """ - readline.write_history_file(history_file) + def setup_history(): + import os + import atexit + import readline + from pathlib import Path + + if state_home := os.environ.get('XDG_STATE_HOME'): + state_home = Path(state_home) + else: + state_home = Path.home() / '.local' / 'state' + + history: Path = state_home / 'python_history' + + # https://github.com/python/cpython/issues/105694 + if not history.is_file(): + readline.write_history_file(str(history)) # breaks on macos + python3 without this. + + readline.read_history_file(str(history)) + atexit.register(readline.write_history_file, str(history)) - atexit.register(partial(write_history, readline, history_file)) + if is_vanilla(): + setup_history() ''; }; diff --git a/home/services/default.nix b/home/services/default.nix index 9799edc..fa9f89a 100644 --- a/home/services/default.nix +++ b/home/services/default.nix @@ -1,5 +1,6 @@ _: { imports = [ ./dunst.nix + ./hyprpaper.nix ]; } diff --git a/home/services/hyprpaper.nix b/home/services/hyprpaper.nix new file mode 100644 index 0000000..aad3a6a --- /dev/null +++ b/home/services/hyprpaper.nix @@ -0,0 +1,34 @@ +{ + lib, + pkgs, + osConfig, + config, + ... +}: let + inherit (lib) mkIf getExe; + + cfg = osConfig.myOptions.home-manager.services.hyprpaper; + cfgIsWayland = osConfig.myOptions.home-manager.wms.isWayland; +in { + config = mkIf (cfg.enable && cfgIsWayland) { + systemd.user.services.hyprpaper = { + Install.WantedBy = [ "hyprland-session.target" ]; + Unit = { + Description = "Hyprpaper (Hyprland wallpaper daemon)"; + PartOf = [ "graphical-session.target" ]; + After = [ "graphical-session.target" ]; + }; + Service = { + Type = "simple"; + ExecStart = "${getExe pkgs.hyprpaper}"; + Restart = "on-failure"; + }; + }; + xdg.configFile."hypr/hyprpaper.conf".text = '' + preload=${cfg.wallpaperPath} + wallpaper=,${cfg.wallpaperPath} # same wallpaper on all monitors + ipc=off + ''; + }; +} + diff --git a/hosts/voyager/default.nix b/hosts/voyager/default.nix index 68be7f9..891e996 100644 --- a/hosts/voyager/default.nix +++ b/hosts/voyager/default.nix @@ -66,6 +66,7 @@ ".config/obs-studio" # Tools + ".ssh" ".local/share/gnupg" ".local/share/zoxide" ".local/share/wakatime" @@ -79,6 +80,7 @@ # Language package managers ".local/share/cargo" ".local/share/go" + ".config/rye" ]; extraFiles = [ ".config/gtk-3.0/bookmarks" @@ -86,6 +88,7 @@ ".cache/walker/history.gob" ".config/pcmanfm-qt/default/recent-files.conf" ".config/qalculate/qalculate-gtk.cfg" + ".local/state/python_history" ]; persistentDataMountPoint = "/data/Data"; @@ -214,6 +217,12 @@ services = { dunst.enable = true; + hyprpaper = { + enable = true; + # This file intentionally lacks a file extension, it should be a symlink + # to whatever file you wish to actually be your wallpaper + wallpaperPath = "/data/Data/Media/Pictures/Wallpapers/active"; + }; }; }; }; diff --git a/options/home/services.nix b/options/home/services.nix index 7586b0a..bd2ec2c 100644 --- a/options/home/services.nix +++ b/options/home/services.nix @@ -4,6 +4,14 @@ in { options.myOptions.home-manager.services = { dunst.enable = mkEnableOption "Dunst (lightweight notification daemon)"; + hyprpaper = { + enable = mkEnableOption "Hyprpaper (Hyprland wallpaper daemon)"; + wallpaperPath = mkOption { + type = types.path; + default = null; + description = "Path to the wallpaper of your choosing"; + }; + }; }; }