diff --git a/.gitignore b/.gitignore index e32e851..6f2994e 100755 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,4 @@ ISSUES/ secrets/ + +result diff --git a/DEVDOC.md b/DEVDOC.md new file mode 100644 index 0000000..4b8567e --- /dev/null +++ b/DEVDOC.md @@ -0,0 +1,25 @@ +## Users + +#### me +My main personal account, used on my PC and laptop. +Contains a hyprland graphical environment by default. + +#### ae +Primary account on my servers. Contains the bare +essentials for my work, no graphical environment. + + +#### friends +A simple account I let me friends connect to. +Limited functionality, mostly just for letting +them test small things or for giving them files. + + +## Setup Guide +##### Adding a New Server +Enable an ssh server on the remote host, then on the +local machine set `.ssh/config` to have a profile for +your desired host and have a key pair that's authorised +to your desired user. + +NOTE: these keys must have permission 600 (only readable/writable by you) diff --git a/INSPIRATION b/INSPIRATION old mode 100644 new mode 100755 diff --git a/TODO b/TODO old mode 100644 new mode 100755 index d91cb7b..f498088 --- a/TODO +++ b/TODO @@ -17,15 +17,20 @@ Get hyprcursor working with Bibata-Modern-Ice Get a GRUB theme working Get SDDM and a theme working +Make a custom hyprlock screen - - -Get waybar (or another bar) working - +Get AGS working +Make an applauncher in AGS +Remove hyprland splash screen on init +Made lolcathost home modular Overtime just install more programs that I need regularly: ie - btop/htop/etc +Get GTK Bibata Cursors to be the same size as my system cursor (NOT SURE WHAT I DID...) + + +Get waybar (or another bar) working Get a QT theme @@ -35,12 +40,10 @@ Bind new terminal to SUPER+Enter instead of SUPER+Q Join Rio Terminal's discord and ask if they support nerdfonts or if I'm doing something wrong -Figure out how to modularise my dotfiles Change Dell loading screen (Boot Graphics Resource Table, aka BGRT) -Get GTK Bibata Cursors to be the same size as my system cursor diff --git a/TODO_UI b/TODO_UI new file mode 100755 index 0000000..34b5246 --- /dev/null +++ b/TODO_UI @@ -0,0 +1,3 @@ +1. Create more themes for my applauncher +2. Create more themes for hyprlock + check out: https://github.com/MrVivekRajan/Hyprlock-Styles diff --git a/deploy b/deploy index b72232d..4dc0576 100755 --- a/deploy +++ b/deploy @@ -1,3 +1,58 @@ #!/usr/bin/env bash -sudo nixos-rebuild switch --flake . -#nixos-rebuild build --flake .# --cores 8 -j 1 +set -e + +usage="Usage: $(basename $0) [OPTIONS] + +Options: + -f, --fresh Remove old content in the nixstore (good for debugging) + -b, --bootloader Reinstall the bootloader + -h, --help Show this message (^_^)" + +# delete all cached entries +# to make the system from scratch +collect_garbage () { + sudo nix-collect-garbage --delete-old +} + +rebuild_flake () { + # make sure all changes are visible to nixos + git add . --verbose + if [ "$1" = "reinstall-bootloader" ]; then + sudo nixos-rebuild switch --flake . --install-bootloader + else + sudo nixos-rebuild switch --flake . + #nixos-rebuild build --flake .# --cores 8 -j 1 + fi +} + +# check which flags were given +flag_fresh=false +flag_bootloader=false +for flag in "$@"; do + case "$flag" in + -f|--fresh) + flag_fresh=true ;; + -b|--bootloader) + flag_bootloader=true ;; + -h|--help) + echo "$usage" + exit 0 ;; + *) + echo "[!] Unknown flag \"$flag\"" + exit 1 ;; + esac +done + +# delete cached items in nixstore +if [ "$flag_fresh" = true ]; then + collect_garbage + exit 0 +fi + +# nixos-rebuild switch ... +if [ "$flag_bootloader" = true ]; then + collect_garbage + rebuild_flake "reinstall-bootloader" +else + rebuild_flake +fi diff --git a/deploy-remote b/deploy-remote new file mode 100755 index 0000000..be09c7d --- /dev/null +++ b/deploy-remote @@ -0,0 +1,13 @@ +#!/usr/bin/env bash + +set -e # terminate if any command fails + +echo "[+] Adding keys to ssh-agent" +ssh-add ~/.ssh/id_hyrule +printf "\n" + +git add . +# Deploy to all Colmena hives +colmena build --experimental-flake-eval +colmena apply --experimental-flake-eval +# colmena apply --on hyrule --experimental-flake-eval diff --git a/flake.lock b/flake.lock index 4f9c813..4e31fa3 100755 --- a/flake.lock +++ b/flake.lock @@ -21,7 +21,7 @@ }, "ags_2": { "inputs": { - "nixpkgs": "nixpkgs_4", + "nixpkgs": "nixpkgs_5", "systems": "systems_3" }, "locked": { @@ -71,7 +71,46 @@ "type": "github" } }, + "colmena": { + "inputs": { + "flake-compat": "flake-compat", + "flake-utils": "flake-utils", + "nix-github-actions": "nix-github-actions", + "nixpkgs": "nixpkgs_2", + "stable": "stable" + }, + "locked": { + "lastModified": 1734374287, + "narHash": "sha256-rINodqeUuezuCWOnpJgrH7u9vJ86fYT+Dj8Mu8T/IBc=", + "owner": "zhaofengli", + "repo": "colmena", + "rev": "47b6414d800c8471e98ca072bc0835345741a56a", + "type": "github" + }, + "original": { + "owner": "zhaofengli", + "repo": "colmena", + "rev": "47b6414d800c8471e98ca072bc0835345741a56a", + "type": "github" + } + }, "flake-compat": { + "flake": false, + "locked": { + "lastModified": 1650374568, + "narHash": "sha256-Z+s0J8/r907g149rllvwhb4pKi8Wam5ij0st8PwAh+E=", + "owner": "edolstra", + "repo": "flake-compat", + "rev": "b4a34015c698c7793d592d66adbab377907a2be8", + "type": "github" + }, + "original": { + "owner": "edolstra", + "repo": "flake-compat", + "type": "github" + } + }, + "flake-compat_2": { "flake": false, "locked": { "lastModified": 1696426674, @@ -87,7 +126,7 @@ "type": "github" } }, - "flake-compat_2": { + "flake-compat_3": { "locked": { "lastModified": 1696426674, "narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=", @@ -101,22 +140,6 @@ "url": "https://flakehub.com/f/edolstra/flake-compat/1.tar.gz" } }, - "flake-compat_3": { - "flake": false, - "locked": { - "lastModified": 1696426674, - "narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=", - "owner": "edolstra", - "repo": "flake-compat", - "rev": "0f9255e01c2351cc7d116c072cb317785dd33b33", - "type": "github" - }, - "original": { - "owner": "edolstra", - "repo": "flake-compat", - "type": "github" - } - }, "flake-compat_4": { "flake": false, "locked": { @@ -133,6 +156,37 @@ "type": "github" } }, + "flake-compat_5": { + "flake": false, + "locked": { + "lastModified": 1696426674, + "narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=", + "owner": "edolstra", + "repo": "flake-compat", + "rev": "0f9255e01c2351cc7d116c072cb317785dd33b33", + "type": "github" + }, + "original": { + "owner": "edolstra", + "repo": "flake-compat", + "type": "github" + } + }, + "flake-utils": { + "locked": { + "lastModified": 1659877975, + "narHash": "sha256-zllb8aq3YO3h8B/U0/J1WBgAL8EX5yWf5pMj3G0NAmc=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "c0e246b9b83f637f4681389ecabcb2681b4f3af0", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, "gitignore": { "inputs": { "nixpkgs": [ @@ -157,7 +211,7 @@ }, "grub2-themes": { "inputs": { - "nixpkgs": "nixpkgs_2" + "nixpkgs": "nixpkgs_3" }, "locked": { "lastModified": 1730004881, @@ -173,26 +227,6 @@ "type": "github" } }, - "home-manager": { - "inputs": { - "nixpkgs": [ - "nixpkgs" - ] - }, - "locked": { - "lastModified": 1730633670, - "narHash": "sha256-ZFJqIXpvVKvzOVFKWNRDyIyAo+GYdmEPaYi1bZB6uf0=", - "owner": "nix-community", - "repo": "home-manager", - "rev": "8f6ca7855d409aeebe2a582c6fd6b6a8d0bf5661", - "type": "github" - }, - "original": { - "owner": "nix-community", - "repo": "home-manager", - "type": "github" - } - }, "hyprcursor": { "inputs": { "hyprlang": [ @@ -230,7 +264,7 @@ "hyprlang": "hyprlang", "hyprutils": "hyprutils", "hyprwayland-scanner": "hyprwayland-scanner", - "nixpkgs": "nixpkgs_3", + "nixpkgs": "nixpkgs_4", "pre-commit-hooks": "pre-commit-hooks", "systems": "systems_2", "xdph": "xdph" @@ -306,7 +340,7 @@ "hyprpanel": { "inputs": { "ags": "ags_2", - "nixpkgs": "nixpkgs_5" + "nixpkgs": "nixpkgs_6" }, "locked": { "lastModified": 1731270736, @@ -388,10 +422,31 @@ "type": "github" } }, + "nix-github-actions": { + "inputs": { + "nixpkgs": [ + "colmena", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1729742964, + "narHash": "sha256-B4mzTcQ0FZHdpeWcpDYPERtyjJd/NIuaQ9+BV1h+MpA=", + "owner": "nix-community", + "repo": "nix-github-actions", + "rev": "e04df33f62cdcf93d73e9a04142464753a16db67", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "nix-github-actions", + "type": "github" + } + }, "nixcord": { "inputs": { - "flake-compat": "flake-compat_2", - "nixpkgs": "nixpkgs_6" + "flake-compat": "flake-compat_3", + "nixpkgs": "nixpkgs_7" }, "locked": { "lastModified": 1730720546, @@ -440,6 +495,22 @@ } }, "nixpkgs_2": { + "locked": { + "lastModified": 1734119587, + "narHash": "sha256-AKU6qqskl0yf2+JdRdD0cfxX4b9x3KKV5RqA6wijmPM=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "3566ab7246670a43abd2ffa913cc62dad9cdf7d5", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_3": { "locked": { "lastModified": 1730808093, "narHash": "sha256-oOenwoxpzQsBNi7KltgnXqq6e0+CxlfNXKn3k27w6cQ=", @@ -455,7 +526,7 @@ "type": "github" } }, - "nixpkgs_3": { + "nixpkgs_4": { "locked": { "lastModified": 1730785428, "narHash": "sha256-Zwl8YgTVJTEum+L+0zVAWvXAGbWAuXHax3KzuejaDyo=", @@ -471,7 +542,7 @@ "type": "github" } }, - "nixpkgs_4": { + "nixpkgs_5": { "locked": { "lastModified": 1725634671, "narHash": "sha256-v3rIhsJBOMLR8e/RNWxr828tB+WywYIoajrZKFM+0Gg=", @@ -487,7 +558,7 @@ "type": "github" } }, - "nixpkgs_5": { + "nixpkgs_6": { "locked": { "lastModified": 1729880355, "narHash": "sha256-RP+OQ6koQQLX5nw0NmcDrzvGL8HDLnyXt/jHhL1jwjM=", @@ -503,7 +574,7 @@ "type": "github" } }, - "nixpkgs_6": { + "nixpkgs_7": { "locked": { "lastModified": 1730768919, "narHash": "sha256-8AKquNnnSaJRXZxc5YmF/WfmxiHX6MMZZasRP6RRQkE=", @@ -519,23 +590,23 @@ "type": "github" } }, - "nixpkgs_7": { + "nixpkgs_8": { "locked": { - "lastModified": 1730785428, - "narHash": "sha256-Zwl8YgTVJTEum+L+0zVAWvXAGbWAuXHax3KzuejaDyo=", + "lastModified": 1739357830, + "narHash": "sha256-9xim3nJJUFbVbJCz48UP4fGRStVW5nv4VdbimbKxJ3I=", "owner": "nixos", "repo": "nixpkgs", - "rev": "4aa36568d413aca0ea84a1684d2d46f55dbabad7", + "rev": "0ff09db9d034a04acd4e8908820ba0b410d7a33a", "type": "github" }, "original": { "owner": "nixos", - "ref": "nixos-unstable", + "ref": "nixos-24.11", "repo": "nixpkgs", "type": "github" } }, - "nixpkgs_8": { + "nixpkgs_9": { "locked": { "lastModified": 1730200266, "narHash": "sha256-l253w0XMT8nWHGXuXqyiIC/bMvh1VRszGXgdpQlfhvU=", @@ -553,7 +624,7 @@ }, "pre-commit-hooks": { "inputs": { - "flake-compat": "flake-compat", + "flake-compat": "flake-compat_2", "gitignore": "gitignore", "nixpkgs": [ "hyprland", @@ -578,20 +649,20 @@ "root": { "inputs": { "ags": "ags", + "colmena": "colmena", "grub2-themes": "grub2-themes", - "home-manager": "home-manager", "hyprland": "hyprland", "hyprpanel": "hyprpanel", "nix-flatpak": "nix-flatpak", "nixcord": "nixcord", - "nixpkgs": "nixpkgs_7", + "nixpkgs": "nixpkgs_8", "spicetify-nix": "spicetify-nix", "swww": "swww" } }, "spicetify-nix": { "inputs": { - "flake-compat": "flake-compat_3", + "flake-compat": "flake-compat_4", "nixpkgs": [ "nixpkgs" ] @@ -610,10 +681,26 @@ "type": "github" } }, + "stable": { + "locked": { + "lastModified": 1730883749, + "narHash": "sha256-mwrFF0vElHJP8X3pFCByJR365Q2463ATp2qGIrDUdlE=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "dba414932936fde69f0606b4f1d87c5bc0003ede", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-24.05", + "repo": "nixpkgs", + "type": "github" + } + }, "swww": { "inputs": { - "flake-compat": "flake-compat_4", - "nixpkgs": "nixpkgs_8", + "flake-compat": "flake-compat_5", + "nixpkgs": "nixpkgs_9", "utils": "utils" }, "locked": { diff --git a/flake.nix b/flake.nix index 138b629..861295a 100755 --- a/flake.nix +++ b/flake.nix @@ -2,13 +2,14 @@ description = "Emile's Nix Dotfiles"; inputs = { - #nixpkgs.url = "github:nixos/nixpkgs/nixos-24.05"; - nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; + # nixpkgs.url = "github:nixos/nixpkgs/nixos-24.05"; + nixpkgs.url = "github:nixos/nixpkgs/nixos-24.11"; + #nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; - home-manager = { - url = "github:nix-community/home-manager"; - inputs.nixpkgs.follows = "nixpkgs"; - }; + #home-manager = { + # url = "github:nix-community/home-manager"; + # inputs.nixpkgs.follows = "nixpkgs"; + #}; spicetify-nix = { url = "github:Gerg-L/spicetify-nix"; @@ -30,31 +31,51 @@ ags.url = "github:Aylur/ags"; hyprpanel.url = "github:Jas-SinghFSU/HyprPanel"; + + # colmena.url = "github:zhaofengli/colmena"; + colmena.url = "github:zhaofengli/colmena/?rev=47b6414d800c8471e98ca072bc0835345741a56a"; + # alternative to colmena (currently in testing) + #deploy-rs.url = "github:serokell/deploy-rs"; + + #wishlist.url = "path:/home/me/nixdots/flakes/wishlist"; }; outputs = { self, nixpkgs, - home-manager, + #home-manager, hyprland, grub2-themes, nixcord, + colmena, + #deploy-rs, ... } @ inputs: let system = "x86_64-linux"; pkgs = import nixpkgs { inherit system; - config.allowUnfree = true; + + config = { + allowUnfree = true; + }; }; + # TODO: come back to this its really cool # this is just something I'm experimenting with PROJECT_ROOT = builtins.toString ./.; in { + # `nix develop` shell + devShells."x86_64-linux".default = pkgs.mkShell { + buildInputs = [ + #colmena-new + ]; + }; + nixosConfigurations = { # i be on my puter fr myputer = nixpkgs.lib.nixosSystem { - # nix passes these to every single module above + # nix passes these to every single module specialArgs = {inherit inputs pkgs;}; modules = [ @@ -72,6 +93,55 @@ grub2-themes.nixosModules.default ]; }; + + # meine vps + # hyrule = nixpkgs.lib.nixosSystem { + # # manually set system architecture since + # # this is for a remote deployment + # system = "x86_64-linux"; + # specialargs = {inherit inputs pkgs;}; + # + # modules = [ + # ./hosts/hyrule + # ]; + # }; + }; + + # remote deployment with deploy-rs + # deploy.nodes.hyrule = { + # hostname = "imbored.dev"; + # # create a primary profile called "system" + # profiles.system = { + # user = "root"; # user to deploy to + # path = deploy-rs.lib.x86_64-linux.activate.nixos self.nixosConfigurations.hyrule; + # + # # ssh configuration for reaching the server + # sshUser = "ae"; + # #interactiveSudo = true; # TODO: use this and revoke passwordless sudo for ae + # sshOpts = ["-i" "/home/me/.ssh/id_hyrule"]; + # remoteBuild = false; # build locally then deploy to remote host + # }; + # }; + + # remote deployment to my servers!! + colmenaHive = colmena.lib.makeHive { + meta = { + # set nixpkgs global + nixpkgs = pkgs; + # set nixpkgs per server + nodeNixpkgs = { + hyrule = import nixpkgs { + system = "x86_64-linux"; + config.allowUnfree = false; + }; + }; + + # we can use `specialArgs.inputs` to inject wishlist into hyrule's module + #specialArgs.inputs = with inputs; {inherit wishlist;}; + }; + + # meine vps + hyrule = import ./hosts/hyrule; }; }; } diff --git a/flakes/wishlist/README b/flakes/wishlist/README new file mode 100644 index 0000000..5c662bb --- /dev/null +++ b/flakes/wishlist/README @@ -0,0 +1,31 @@ +#### wishlist.nix +This is a simple Nix flake defining a service from which +wishlist can run automatically. This flake runs wishlist-0.15.1 +and lacks configurability unfortunately. However this was an +intentional choice, allowing wishlist to read from the user's +`~/.ssh/config` file, which can be configured seperately using +the something akin to the follow home-manager snippet: +```nix +programs.ssh = { + enable = true; + addKeysToAgent = "yes"; # always add keys to ssh-agent + + matchBlocks = { + hyrule = { + hostname = "imbored.dev"; + user = "ae"; + port = 22; + identityFile = "/home/me/.ssh/id_hyrule"; + }; + }; +}; + +``` + +This decision was mostly selfish as it was easiest... +But it comes at the cost of not being able to set the +port wishlist listens on. So for now you're stuck with `2222`. + +###### The Future!! (woooowwww) +Create an option for wishlist that is used to construct +the `config.yaml` file diff --git a/flakes/wishlist/flake.nix b/flakes/wishlist/flake.nix new file mode 100644 index 0000000..a98561a --- /dev/null +++ b/flakes/wishlist/flake.nix @@ -0,0 +1,93 @@ +{ + inputs = { + nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; + flake-utils.url = "github:numtide/flake-utils"; + }; + + outputs = { + self, + config, + nixpkgs, + lib, + flake-utils, + }: let + cfg = config.services.wishlist; + supportedSystems = ["x86_64-linux" "i686-linux" "aarch64-linux" "x86_64-darwin" "aarch64-darwin"]; + in { + # TODO: 1. add options (ie one to set whether the server should be enabled), + # 2. create a systemd service + # 3. create a main program + # 4. celibrate + + # TODO: do I need to make this a home-manager option and set the yaml config? + + # define what settings a user can change + options = { + services.wishlist = with lib; { + enable = mkEnableOption "wishlist"; + + port = mkOption { + type = types.port; + default = 2222; + description = "Port to listen on"; + }; + + package = mkOption { + type = types.package; + default = self.packages.${nixpkgs.system}.default; + description = "Package to use"; + }; + }; + }; + + # define a systemd service for wishlist ^_^ + config = lib.mkIf cfg.enable { + systemd.services.wishlist = { + description = "Single entrypoint for multiple SSH endpoints"; + wantedBy = ["multi-user.target"]; + + serviceConfig = { + DynamicUser = "yes"; + ExecStart = "${cfg.package}/bin/wishlist serve"; + Restart = "always"; + RestartSec = "2s"; + }; + }; + }; + + packages = flake-utils.lib.eachSystem supportedSystems ( + system: let + version = "0.15.1"; + #pkgs = nixpkgs.legacyPackages.${system}; + pkgs = import nixpkgs { + inherit system; + config.allowUnfree = false; + }; + #lib = pkgs.lib; + in rec { + defaultPackage = self.packages.${system}.wishlist; + wishlist = pkgs.buildGoModule { + pname = "wishlist"; + inherit version; + meta = with lib; { + description = "Single entrypoint for multiple SSH endpoints"; + homepage = "https://github.com/charmbracelet/wishlist"; + changelog = "https://github.com/charmbracelet/wishlist/releases/tag/v${version}"; + license = licenses.mit; + maintainers = with maintainers; [caarlos0 penguwin]; + mainProgram = "wishlist"; + }; + + src = pkgs.fetchFromGitHub { + owner = "charmbracelet"; + repo = "wishlist"; + rev = "v${version}"; + # rev = "d7f058e115a8b4a4131406d01dde84fb4a8e93c4"; + hash = "53fojA+gdvpSVNjx6QncH16F8/x+lpY5SkNs7obW2XQ="; + }; + vendorSha256 = "0x6rss3fwv2398wrd5kyzkrqaphzvh4ykwfqai9glxm01y6fhxz7"; + }; + } + ); + }; +} diff --git a/flakes/wishlist/wishlist.nix b/flakes/wishlist/wishlist.nix new file mode 100644 index 0000000..1bdb24b --- /dev/null +++ b/flakes/wishlist/wishlist.nix @@ -0,0 +1,99 @@ +# NOTE: Wishlist service fails on nix because of readonly file system +# and it can't find a config file for itself, it needs to write that +# itself I suppose :( +# So: +# 1. Get it to write that file, and +# 2. Allow it to inherit profiles from configured ssh +{ + self, + config, + pkgs, + lib, +}: let + cfg = config.services.wishlist; +in { + options = { + services.wishlist = with lib; { + enable = mkEnableOption "wishlist"; + + name = mkOption { + type = types.str; + default = + }; + + port = mkOption { + type = types.port; + default = 2222; + description = "Port to listen on"; + }; + + #configPath = mkOption { + # type = types.path; + # default = ; + # description = "Path to config file"; + #}; + + package = mkOption { + type = types.package; + default = self.packages.${nixpkgs.system}.default; + description = "Package to use"; + }; + }; + }; + + # define a systemd service for wishlist ^_^ + config = lib.mkIf cfg.enable { + systemd.services.wishlist = { + description = "Single entrypoint for multiple SSH endpoints"; + wantedBy = ["multi-user.target"]; + + serviceConfig = let + wishlistServiceConfig = pkgs.writeText "config.yaml" '' + hello world! + ''; + in { + DynamicUser = "yes"; + ExecStart = "${pkgs.wishlist}/bin/wishlist serve --config ${wishlistServiceConfig}"; + Restart = "always"; + RestartSec = "2s"; + }; + }; + }; + + /* + packages = flake-utils.lib.eachSystem supportedSystems ( + system: let + version = "0.15.1"; + #pkgs = nixpkgs.legacyPackages.${system}; + pkgs = import nixpkgs { + inherit system; + config.allowUnfree = false; + }; + #lib = pkgs.lib; + in rec { + defaultPackage = self.packages.${system}.wishlist; + wishlist = pkgs.buildGoModule { + pname = "wishlist"; + inherit version; + meta = with lib; { + description = "Single entrypoint for multiple SSH endpoints"; + homepage = "https://github.com/charmbracelet/wishlist"; + changelog = "https://github.com/charmbracelet/wishlist/releases/tag/v${version}"; + license = licenses.mit; + maintainers = with maintainers; [caarlos0 penguwin]; + mainProgram = "wishlist"; + }; + + src = pkgs.fetchFromGitHub { + owner = "charmbracelet"; + repo = "wishlist"; + rev = "v${version}"; + # rev = "d7f058e115a8b4a4131406d01dde84fb4a8e93c4"; + hash = "53fojA+gdvpSVNjx6QncH16F8/x+lpY5SkNs7obW2XQ="; + }; + vendorSha256 = "0x6rss3fwv2398wrd5kyzkrqaphzvh4ykwfqai9glxm01y6fhxz7"; + }; + } + ); + */ +} diff --git a/homes/ae/default.nix b/homes/ae/default.nix new file mode 100644 index 0000000..b92f739 --- /dev/null +++ b/homes/ae/default.nix @@ -0,0 +1,56 @@ +{ + inputs, + outputs, + lib, + config, + pkgs, + ... +}: { + nixpkgs = { + config.allowUnfree = false; + }; + + imports = [ + ]; + + home = { + username = "ae"; + homeDirectory = "/home/ae"; + }; + + programs = { + }; + + # Nicely reload system units when changing configs + systemd.user.startServices = "sd-switch"; + + # ssh = { + # enable = true; + # forwardAgent = true; + # addKeysToAgent = "yes"; + + # matchBlocks = { + # hyrule = { + # hostname = "imbored.dev"; + # user = "ae"; + # port = 22; + # identityFile = "/home/ae/.ssh/id_hyrule"; + # }; + # }; + # }; + + # SERVICE: webfishing (example for wishlist) + #systemd.user.services.webfishing = { + # Unit.Description = "I be out here webfishing frfr"; + + # Install.WantedBy = ["default.target"]; + + # Service = { + # Type = "exec"; + # ExecStart = "echo $HOME; cat $HOME/.ssh/config"; + # Restart = "always"; + # }; + #}; + + home.stateVersion = "24.11"; # DO NOT MODIFY +} diff --git a/homes/me/ags-end4/assets/icons/ai-openai-symbolic.svg b/homes/me/ags-end4/assets/icons/ai-openai-symbolic.svg deleted file mode 120000 index c9ee0b3..0000000 --- a/homes/me/ags-end4/assets/icons/ai-openai-symbolic.svg +++ /dev/null @@ -1 +0,0 @@ -openai-symbolic.svg \ No newline at end of file diff --git a/homes/me/ags-end4/assets/icons/ai-oxygen-symbolic.svg b/homes/me/ags-end4/assets/icons/ai-oxygen-symbolic.svg deleted file mode 100644 index 5e1cc19..0000000 --- a/homes/me/ags-end4/assets/icons/ai-oxygen-symbolic.svg +++ /dev/null @@ -1,54 +0,0 @@ - - - - - - - - - - diff --git a/homes/me/ags-end4/assets/icons/ai-zukijourney.png b/homes/me/ags-end4/assets/icons/ai-zukijourney.png deleted file mode 100644 index 917335e..0000000 Binary files a/homes/me/ags-end4/assets/icons/ai-zukijourney.png and /dev/null differ diff --git a/homes/me/ags-end4/assets/icons/arch-symbolic.svg b/homes/me/ags-end4/assets/icons/arch-symbolic.svg deleted file mode 100644 index 7de9094..0000000 --- a/homes/me/ags-end4/assets/icons/arch-symbolic.svg +++ /dev/null @@ -1,113 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/homes/me/ags-end4/assets/icons/cachyos-symbolic.svg b/homes/me/ags-end4/assets/icons/cachyos-symbolic.svg deleted file mode 100644 index 4a9db19..0000000 --- a/homes/me/ags-end4/assets/icons/cachyos-symbolic.svg +++ /dev/null @@ -1,318 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/homes/me/ags-end4/assets/icons/cloudflare-dns-symbolic.svg b/homes/me/ags-end4/assets/icons/cloudflare-dns-symbolic.svg deleted file mode 100644 index bd48d3c..0000000 --- a/homes/me/ags-end4/assets/icons/cloudflare-dns-symbolic.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - diff --git a/homes/me/ags-end4/assets/icons/crosshair-symbolic.svg b/homes/me/ags-end4/assets/icons/crosshair-symbolic.svg deleted file mode 100644 index 2296749..0000000 --- a/homes/me/ags-end4/assets/icons/crosshair-symbolic.svg +++ /dev/null @@ -1,65 +0,0 @@ - - - - - - - ionicons-v5_logos - - - - ionicons-v5_logos - - - - - - diff --git a/homes/me/ags-end4/assets/icons/debian-symbolic.svg b/homes/me/ags-end4/assets/icons/debian-symbolic.svg deleted file mode 100644 index 252f853..0000000 --- a/homes/me/ags-end4/assets/icons/debian-symbolic.svg +++ /dev/null @@ -1,91 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - diff --git a/homes/me/ags-end4/assets/icons/endeavouros-symbolic.svg b/homes/me/ags-end4/assets/icons/endeavouros-symbolic.svg deleted file mode 100644 index 3be4cc4..0000000 --- a/homes/me/ags-end4/assets/icons/endeavouros-symbolic.svg +++ /dev/null @@ -1,96 +0,0 @@ - - - - - EndeavourOS Logo - - - - image/svg+xml - - EndeavourOS Logo - - - - - - - - - - - - - - - - - - - diff --git a/homes/me/ags-end4/assets/icons/fedora-symbolic.svg b/homes/me/ags-end4/assets/icons/fedora-symbolic.svg deleted file mode 100644 index 1a4e8c8..0000000 --- a/homes/me/ags-end4/assets/icons/fedora-symbolic.svg +++ /dev/null @@ -1,38 +0,0 @@ - - - - - - - diff --git a/homes/me/ags-end4/assets/icons/flatpak-symbolic.svg b/homes/me/ags-end4/assets/icons/flatpak-symbolic.svg deleted file mode 100644 index 0c2bf62..0000000 --- a/homes/me/ags-end4/assets/icons/flatpak-symbolic.svg +++ /dev/null @@ -1,52 +0,0 @@ - - - - - Flatpak - - - - - Flatpak - - - - diff --git a/homes/me/ags-end4/assets/icons/github-symbolic.svg b/homes/me/ags-end4/assets/icons/github-symbolic.svg deleted file mode 100644 index c1c9f19..0000000 --- a/homes/me/ags-end4/assets/icons/github-symbolic.svg +++ /dev/null @@ -1,40 +0,0 @@ - - - - - - diff --git a/homes/me/ags-end4/assets/icons/google-gemini-symbolic.svg b/homes/me/ags-end4/assets/icons/google-gemini-symbolic.svg deleted file mode 100644 index 9de741b..0000000 --- a/homes/me/ags-end4/assets/icons/google-gemini-symbolic.svg +++ /dev/null @@ -1,56 +0,0 @@ - - - - - - - ionicons-v5_logos - - - - - ionicons-v5_logos - - - - diff --git a/homes/me/ags-end4/assets/icons/linux-symbolic.svg b/homes/me/ags-end4/assets/icons/linux-symbolic.svg deleted file mode 100644 index 63f9c7e..0000000 --- a/homes/me/ags-end4/assets/icons/linux-symbolic.svg +++ /dev/null @@ -1,113 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/homes/me/ags-end4/assets/icons/nixos-symbolic.svg b/homes/me/ags-end4/assets/icons/nixos-symbolic.svg deleted file mode 100644 index b697b0d..0000000 --- a/homes/me/ags-end4/assets/icons/nixos-symbolic.svg +++ /dev/null @@ -1,77 +0,0 @@ - - - - - - - - - - - - - - - - diff --git a/homes/me/ags-end4/assets/icons/ollama-symbolic.svg b/homes/me/ags-end4/assets/icons/ollama-symbolic.svg deleted file mode 100644 index 0145481..0000000 --- a/homes/me/ags-end4/assets/icons/ollama-symbolic.svg +++ /dev/null @@ -1,60 +0,0 @@ - - - - - - - - - - - - diff --git a/homes/me/ags-end4/assets/icons/openai-symbolic.svg b/homes/me/ags-end4/assets/icons/openai-symbolic.svg deleted file mode 100644 index 8ffc912..0000000 --- a/homes/me/ags-end4/assets/icons/openai-symbolic.svg +++ /dev/null @@ -1,38 +0,0 @@ - - - - - - diff --git a/homes/me/ags-end4/assets/icons/openrouter-symbolic.svg b/homes/me/ags-end4/assets/icons/openrouter-symbolic.svg deleted file mode 100644 index 32aaaf5..0000000 --- a/homes/me/ags-end4/assets/icons/openrouter-symbolic.svg +++ /dev/null @@ -1,39 +0,0 @@ - - - - - - diff --git a/homes/me/ags-end4/assets/icons/ubuntu-symbolic.svg b/homes/me/ags-end4/assets/icons/ubuntu-symbolic.svg deleted file mode 100644 index 07746c9..0000000 --- a/homes/me/ags-end4/assets/icons/ubuntu-symbolic.svg +++ /dev/null @@ -1,85 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/homes/me/ags-end4/assets/themes/sourceviewtheme-dark-monokai-license.txt b/homes/me/ags-end4/assets/themes/sourceviewtheme-dark-monokai-license.txt deleted file mode 100644 index d159169..0000000 --- a/homes/me/ags-end4/assets/themes/sourceviewtheme-dark-monokai-license.txt +++ /dev/null @@ -1,339 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 2, June 1991 - - Copyright (C) 1989, 1991 Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -License is intended to guarantee your freedom to share and change free -software--to make sure the software is free for all its users. This -General Public License applies to most of the Free Software -Foundation's software and to any other program whose authors commit to -using it. (Some other Free Software Foundation software is covered by -the GNU Lesser General Public License instead.) You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it -if you want it, that you can change the software or use pieces of it -in new free programs; and that you know you can do these things. - - To protect your rights, we need to make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if you -distribute copies of the software, or if you modify it. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must give the recipients all the rights that -you have. You must make sure that they, too, receive or can get the -source code. And you must show them these terms so they know their -rights. - - We protect your rights with two steps: (1) copyright the software, and -(2) offer you this license which gives you legal permission to copy, -distribute and/or modify the software. - - Also, for each author's protection and ours, we want to make certain -that everyone understands that there is no warranty for this free -software. If the software is modified by someone else and passed on, we -want its recipients to know that what they have is not the original, so -that any problems introduced by others will not reflect on the original -authors' reputations. - - Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that redistributors of a free -program will individually obtain patent licenses, in effect making the -program proprietary. To prevent this, we have made it clear that any -patent must be licensed for everyone's free use or not licensed at all. - - The precise terms and conditions for copying, distribution and -modification follow. - - GNU GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License applies to any program or other work which contains -a notice placed by the copyright holder saying it may be distributed -under the terms of this General Public License. The "Program", below, -refers to any such program or work, and a "work based on the Program" -means either the Program or any derivative work under copyright law: -that is to say, a work containing the Program or a portion of it, -either verbatim or with modifications and/or translated into another -language. (Hereinafter, translation is included without limitation in -the term "modification".) Each licensee is addressed as "you". - -Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running the Program is not restricted, and the output from the Program -is covered only if its contents constitute a work based on the -Program (independent of having been made by running the Program). -Whether that is true depends on what the Program does. - - 1. You may copy and distribute verbatim copies of the Program's -source code as you receive it, in any medium, provided that you -conspicuously and appropriately publish on each copy an appropriate -copyright notice and disclaimer of warranty; keep intact all the -notices that refer to this License and to the absence of any warranty; -and give any other recipients of the Program a copy of this License -along with the Program. - -You may charge a fee for the physical act of transferring a copy, and -you may at your option offer warranty protection in exchange for a fee. - - 2. You may modify your copy or copies of the Program or any portion -of it, thus forming a work based on the Program, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) You must cause the modified files to carry prominent notices - stating that you changed the files and the date of any change. - - b) You must cause any work that you distribute or publish, that in - whole or in part contains or is derived from the Program or any - part thereof, to be licensed as a whole at no charge to all third - parties under the terms of this License. - - c) If the modified program normally reads commands interactively - when run, you must cause it, when started running for such - interactive use in the most ordinary way, to print or display an - announcement including an appropriate copyright notice and a - notice that there is no warranty (or else, saying that you provide - a warranty) and that users may redistribute the program under - these conditions, and telling the user how to view a copy of this - License. (Exception: if the Program itself is interactive but - does not normally print such an announcement, your work based on - the Program is not required to print an announcement.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Program, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Program, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Program. - -In addition, mere aggregation of another work not based on the Program -with the Program (or with a work based on the Program) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may copy and distribute the Program (or a work based on it, -under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you also do one of the following: - - a) Accompany it with the complete corresponding machine-readable - source code, which must be distributed under the terms of Sections - 1 and 2 above on a medium customarily used for software interchange; or, - - b) Accompany it with a written offer, valid for at least three - years, to give any third party, for a charge no more than your - cost of physically performing source distribution, a complete - machine-readable copy of the corresponding source code, to be - distributed under the terms of Sections 1 and 2 above on a medium - customarily used for software interchange; or, - - c) Accompany it with the information you received as to the offer - to distribute corresponding source code. (This alternative is - allowed only for noncommercial distribution and only if you - received the program in object code or executable form with such - an offer, in accord with Subsection b above.) - -The source code for a work means the preferred form of the work for -making modifications to it. For an executable work, complete source -code means all the source code for all modules it contains, plus any -associated interface definition files, plus the scripts used to -control compilation and installation of the executable. However, as a -special exception, the source code distributed need not include -anything that is normally distributed (in either source or binary -form) with the major components (compiler, kernel, and so on) of the -operating system on which the executable runs, unless that component -itself accompanies the executable. - -If distribution of executable or object code is made by offering -access to copy from a designated place, then offering equivalent -access to copy the source code from the same place counts as -distribution of the source code, even though third parties are not -compelled to copy the source along with the object code. - - 4. You may not copy, modify, sublicense, or distribute the Program -except as expressly provided under this License. Any attempt -otherwise to copy, modify, sublicense or distribute the Program is -void, and will automatically terminate your rights under this License. -However, parties who have received copies, or rights, from you under -this License will not have their licenses terminated so long as such -parties remain in full compliance. - - 5. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Program or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Program (or any work based on the -Program), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Program or works based on it. - - 6. Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the -original licensor to copy, distribute or modify the Program subject to -these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties to -this License. - - 7. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Program at all. For example, if a patent -license would not permit royalty-free redistribution of the Program by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Program. - -If any portion of this section is held invalid or unenforceable under -any particular circumstance, the balance of the section is intended to -apply and the section as a whole is intended to apply in other -circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system, which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 8. If the distribution and/or use of the Program is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Program under this License -may add an explicit geographical distribution limitation excluding -those countries, so that distribution is permitted only in or among -countries not thus excluded. In such case, this License incorporates -the limitation as if written in the body of this License. - - 9. The Free Software Foundation may publish revised and/or new versions -of the General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - -Each version is given a distinguishing version number. If the Program -specifies a version number of this License which applies to it and "any -later version", you have the option of following the terms and conditions -either of that version or of any later version published by the Free -Software Foundation. If the Program does not specify a version number of -this License, you may choose any version ever published by the Free Software -Foundation. - - 10. If you wish to incorporate parts of the Program into other free -programs whose distribution conditions are different, write to the author -to ask for permission. For software which is copyrighted by the Free -Software Foundation, write to the Free Software Foundation; we sometimes -make exceptions for this. Our decision will be guided by the two goals -of preserving the free status of all derivatives of our free software and -of promoting the sharing and reuse of software generally. - - NO WARRANTY - - 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY -FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN -OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES -PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED -OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS -TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE -PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, -REPAIR OR CORRECTION. - - 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING -OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED -TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY -YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER -PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGES. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License along - with this program; if not, write to the Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - -Also add information on how to contact you by electronic and paper mail. - -If the program is interactive, make it output a short notice like this -when it starts in an interactive mode: - - Gnomovision version 69, Copyright (C) year name of author - Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, the commands you use may -be called something other than `show w' and `show c'; they could even be -mouse-clicks or menu items--whatever suits your program. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the program, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the program - `Gnomovision' (which makes passes at compilers) written by James Hacker. - - , 1 April 1989 - Ty Coon, President of Vice - -This General Public License does not permit incorporating your program into -proprietary programs. If your program is a subroutine library, you may -consider it more useful to permit linking proprietary applications with the -library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. diff --git a/homes/me/ags-end4/assets/themes/sourceviewtheme-light.xml b/homes/me/ags-end4/assets/themes/sourceviewtheme-light.xml deleted file mode 100644 index bf39bfb..0000000 --- a/homes/me/ags-end4/assets/themes/sourceviewtheme-light.xml +++ /dev/null @@ -1,95 +0,0 @@ - - - end_4 - <_description>Catppuccin port but very random - -