yadm-dev / yadm

Yet Another Dotfiles Manager
https://yadm.io/
GNU General Public License v3.0
5.15k stars 177 forks source link

Winget support #496

Open louiss0 opened 2 months ago

louiss0 commented 2 months ago

Is your feature request related to a problem? Please describe.

Installing and setting up yadm is a painful process. It's a tool that must always be installed before using my program. I can only install it by using a source or a package manager like basher.

Describe the solution you'd like

I think it should be installed by using a package manager like winget, choco or any non-bash related package manager.

Describe alternatives you've considered

I wanted to create my own package to install yadm.

Additional context

Well I'm asking for the creation of a yadm installer for winget. The link for doing that is here. https://learn.microsoft.com/en-us/windows/package-manager/package/

P.S I'm willing to do this but if I do where do I place the package. Do I send a link to the repo that i created or do I submit a pull request.

erijo commented 2 weeks ago

How would the installer look like/work?

louiss0 commented 3 days ago

How would the installer look like/work?

The installer would download yadm by using a release URL.

The code would be similar to the done below. This is the brew code.

class Yadm < Formula
  desc "Yet Another Dotfiles Manager"
  homepage "https://yadm.io/"
  url "https://github.com/yadm-dev/yadm/archive/refs/tags/3.3.0.tar.gz"
  sha256 "a977836ee874fece3d69b5a8f7436e6ce4e6bf8d2520f8517c128281cc6b101d"
  license "GPL-3.0-or-later"
  head "https://github.com/yadm-dev/yadm.git", branch: "master"

  bottle do
    sha256 cellar: :any_skip_relocation, all: "d86d417aca8da9b28d8979c52813d33d24073798b27600cad823c47c7dd9cd26"
  end

  def install
    system "make", "install", "PREFIX=#{prefix}"
    bash_completion.install "completion/bash/yadm"
    fish_completion.install "completion/fish/yadm.fish"
    zsh_completion.install "completion/zsh/_yadm"
  end

  test do
    system bin/"yadm", "init"
    assert_predicate testpath/".local/share/yadm/repo.git/config", :exist?, "Failed to init repository."
    assert_match testpath.to_s, shell_output("#{bin}/yadm gitconfig core.worktree")

    # disable auto-alt
    system bin/"yadm", "config", "yadm.auto-alt", "false"
    assert_match "false", shell_output("#{bin}/yadm config yadm.auto-alt")

    (testpath/"testfile").write "test"
    system bin/"yadm", "add", "#{testpath}/testfile"

    system bin/"yadm", "gitconfig", "user.email", "test@test.org"
    system bin/"yadm", "gitconfig", "user.name", "Test User"

    system bin/"yadm", "commit", "-m", "test commit"
    assert_match "test commit", shell_output("#{bin}/yadm log --pretty=oneline 2>&1")
  end
end
louiss0 commented 3 days ago

How would the installer look like/work?

What you do is write a manifest file that contains code that looks like this.

PackageIdentifier:  # Publisher.package format.
PackageVersion:     # Version numbering format.
PackageLocale:      # BCP 47 format (e.g. en-US)
Publisher:          # The name of the publisher.
PackageName:        # The name of the application.
License:            # The license of the application.
ShortDescription:   # The description of the application.
Installers: 
 - Architecture:    # Enumeration of supported architectures.
   InstallerType:   # Enumeration of supported installer types (exe, msi, msix, inno, wix, nullsoft, appx).
   InstallerUrl:    # Path to download installation file.
   InstallerSha256: # SHA256 calculated from installer.
ManifestType:       # The manifest file type
ManifestVersion: 1.6.0
louiss0 commented 3 days ago

If you click the link to the website it should explain everything.

If you need to video watch this one https://youtu.be/uxr7m8wDeGA?t=592

Start at that exact time

erijo commented 2 days ago

Yes, I understand the manifest part. But it's the actual installer i.e. the what I assume must be a .exe or .msi or similar file that I'm wondering about. I'm guessing you can write it in ruby like for homebrew?

louiss0 commented 2 days ago

Yes, I understand the manifest part. But it's the actual installer i.e. the what I assume must be a .exe or .msi or similar file that I'm wondering about. I'm guessing you can write it in ruby like for homebrew?

No it can be a url!