guix-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: A simple workflow for adding apps guix


From: Feng Shu
Subject: Re: A simple workflow for adding apps guix
Date: Sun, 23 Jul 2017 06:04:11 +0800
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/25.2 (gnu/linux)

"Feng Shu" <address@hidden> writes:

The below is my simple workflow, maybe useful :-)

-------------------------------------------------------------------
#+TITLE:  Feng Shu's guix devel workflow

If you just want to add a new guix package or upgrade a exist guix package,
The below workflow may be useful.

If you want to hack guix's other code, I suggest you just leave and read
guix manual :-)


* Fetch guix.git
#+BEGIN_EXAMPLE
cd ~/project
git clone git clone https://git.savannah.gnu.org/guix.git
#+END_EXAMPLE

* Install emacs
#+BEGIN_EXAMPLE
guix package -i emacs
#+END_EXAMPLE

* Install emacs packages
1. guix
2. counsel
3. swiper
4. gitpatch
5. magit

* Config emacs
1. guix-directory is your *guix git repo directory*
2. "~/.config/guix/latest" is the latest guix you have install.
#+BEGIN_SRC emacs-lisp
(use-package guix
  :ensure nil
  :config
  (setq guix-directory "~/project/guix")
  (add-hook 'after-init-hook 'global-guix-prettify-mode)
  (add-hook 'scheme-mode-hook 'guix-devel-mode)
  (with-eval-after-load 'geiser-guile
    ;; NOTE: "~/.config/guix/latest/" is invaild,
    ;; use "~/.config/guix/latest" instead.
    (add-to-list 'geiser-guile-load-path
                 (concat (file-name-directory (locate-library "geiser.el"))
                         "scheme/guile"))
    (add-to-list 'geiser-guile-load-path "~/.config/guix/latest")))
#+END_SRC

* Hack code
I use package emacs-exwm-x as an example:

1. Open "~/project/guix/gnu/packages/emacs.scm" with emacs
2. Hack code
   1.  Type "C-c C-z" (geiser-mode-switch-to-repl), A new guile buffer will 
open.
   2.  Type "C-c C-z" again, you will switch to emacs.scm file buffer.
   3.  Type "C-c . u" to load guix module (guix-devel-use-module), 1-3 second 
is need.
   4.  Type "C-s" to search emacs-exwm-x's define-public and jump to it.
   5.  Type "C-c C-c" or "C-M-x" to eval emacs-exwm-x's define-public
   6.  Error is found, eval switch-window's define-public and eval 
emacs-exwm-x's define-public again.
       For emacs-exwm-x depend switch-window
   7.  Hack emacs-exwm-x's define-public ....
   8.  Type "C-c . d" to download emacs-exwm-x's source and get sha256 string.
       #+BEGIN_EXAMPLE
       (sha256
         (base32
            "1ny13i82fb72917jgl0ndwjg1x6l9f8gfhcx7cwlwhh5saq23mvy"))
       #+END_EXAMPLE
   9.  Hack finished ...
   10. (Importent) Type "C-c C-c" or "C-M-x" to eval emacs-exwm-x's 
define-public
   11. Type "C-c . b" to build newest emacs-exwm-x :-)
   12. Hack, deal with build problem ...

3. Commit and send-patch
   1. I use counsel-git-log to find a history commit message as commit template 
:-)
   2. git pull --rebase (make sure the patch we generate can am to guix master)
   3. I use magit-format-patch to generate patch file.
   4. I use gitpatch-mail command to send patch to address@hidden
      it use message-mode or gnus.
      #+BEGIN_SRC emacs-lisp
      (use-package gitpatch
        :bind (("C-c m" . gitpatch-mail))
        :ensure nil
        :config
        (setq gitpatch-mail-function 'gnus-msg-mail)
        (setq gitpatch-mail-attach-patch-key "C-c i")
        (setq gitpatch-mail-database
              '("address@hidden"
                "address@hidden"
                "address@hidden"
                "address@hidden")))
      #+END_SRC

-------------------------------------------------------------------------
> Marius Bakke <address@hidden> writes:
>
> Now, I finally make my guix devel workflow :-)
>
> ----------------------------------------------------------------------
>
> #+TITLE:  Feng Shu's guix devel workflow
>
> If you just want to add a new guix package or upgrade a exist guix package,
> The below workflow may be useful.
>
> If you want to hack guix's other code, I suggest you just leave and read
> guix manual :-)
>
>
> * Fetch guix.git
>
> #+BEGIN_EXAMPLE
> cd ~/project
> git clone git clone https://git.savannah.gnu.org/guix.git
> #+END_EXAMPLE
>
>
> * Install emacs
>
> #+BEGIN_EXAMPLE
> guix package -i emacs
> #+END_EXAMPLE
>
>
> * Install emacs packages
> 1. guix
> 2. counsel
> 3. swiper
> 4. gitpatch
> 5. magit
>
> * Config emacs
> 1. guix-directory is your *guix git repo directory*
> 2. "~/.config/guix/latest" is the latest guix you have install.
>
> #+BEGIN_SRC emacs-lisp
> (use-package guix
>   :ensure nil
>   :config
>   (setq guix-directory "~/project/guix")
>   (add-hook 'after-init-hook 'global-guix-prettify-mode)
>   (add-hook 'scheme-mode-hook 'guix-devel-mode)
>   (with-eval-after-load 'geiser-guile
>     ;; NOTE: "~/.config/guix/latest/" is invaild,
>     ;; use "~/.config/guix/latest" instead.
>     (add-to-list 'geiser-guile-load-path
>                  (concat (file-name-directory (locate-library "geiser.el"))
>                          "scheme/guile"))
>     (add-to-list 'geiser-guile-load-path "~/.config/guix/latest")))
> #+END_SRC
>
>
> * Hack code
> I use package emacs-exwm-x as an example:
>
> 1. Open "~/project/guix/gnu/packages/emacs.scm" with emacs
> 2. Hack code
>    1.  Type "C-c C-z" (geiser-mode-switch-to-repl), A new guile buffer will 
> open.
>    2.  Type "C-c C-z" again, you will switch to emacs.scm file buffer.
>    3.  Type "C-c . u" to load guix module (guix-devel-use-module), 1-3 second 
> is need.
>    4.  Type "C-s" to search emacs-exwm-x's define-public and jump to it.
>    5.  Type "C-c C-c" or "C-M-x" to eval emacs-exwm-x's define-public
>    6.  Error is found, eval switch-window's define-public and eval 
> emacs-exwm-x's define-public again.
>        For emacs-exwm-x depend switch-window
>    7.  Hack emacs-exwm-x's define-public ....
>    8.  Type "C-c . d" to download emacs-exwm-x's source and get sha256 string.
>
>        #+BEGIN_EXAMPLE
>        (sha256
>          (base32
>             "1ny13i82fb72917jgl0ndwjg1x6l9f8gfhcx7cwlwhh5saq23mvy"))
>        #+END_EXAMPLE
>
>    9.  Hack finished ...
>    10. (Importent) Type "C-c C-c" or "C-M-x" to eval emacs-exwm-x's 
> define-public
>    11. Type "C-c . b" to build newest emacs-exwm-x :-)
>    12. Hack, deal with build problem ...
>
> 3. Commit and send-patch
>    1. I use counsel-git-log to find a history commit message as commit 
> template :-)
>    2. I use magit-format-patch to generate patch file.
>    3. I use gitpatch-mail command to send patch to address@hidden
>       it use message-mode or gnus.
>
>       #+BEGIN_SRC emacs-lisp
>       (use-package gitpatch
>         :bind (("C-c m" . gitpatch-mail))
>         :ensure nil
>         :config
>         (setq gitpatch-mail-function 'gnus-msg-mail)
>         (setq gitpatch-mail-attach-patch-key "C-c i")
>         (setq gitpatch-mail-database
>               '("address@hidden"
>                 "address@hidden"
>                 "address@hidden"
>                 "address@hidden")))
>       #+END_SRC
>
> -------------------------------------------------------------------------------
>
>> Feng Shu <address@hidden> writes:
>>
>>> The below is the workflow I used current, any other
>>> simpler workflow exists?  comments are welcome!
>>
>> Hello! If you intend to submit these packages, I would recommend working
>> directly from the main git repository rather than messing with
>> GUIX_PACKAGE_PATH. Have a look at the "Running Guix before it is
>> installed" section in the manual:
>>
>> https://www.gnu.org/software/guix/manual/guix.html#Running-Guix-Before-It-Is-Installed>
>> There is a 'pre-inst-env' script that makes testing local changes easy.
>> Here is my typical workflow (motley gear optional):
>>
>> # Start with a clean master branch.
>> $ git checkout master
>> $ git pull # sometimes "--rebase" or simply `git reset --hard`..
>> # Create environment with all Guix dependencies.
>> $ ge guix # "ge" is an alias for `guix environment`...
>> # If this is a new machine, prepare the sources for this environment.
>> $ ./bootstrap
>> $ ./configure --localstatedir=/var
>> # Now compile everything. This is typically done after each `pull`.
>> $ make -j10
>> # Phew! Now let's start working on our package.
>> $ git checkout -b package-foo
>> <insert matrix gif>
>> $ ./pre-inst-env guix build foo # installing works too
>> # It builds! Let's commit it.
>> $ git add -p
>> $ git commit
>> # D'oh! Something was not right.
>> $ ./pre-inst-env guix edit foo # I don't actually use this, but..
>> $ ./pre-inst-env guix build foo
>> # Great, this looks better.
>> $ git add -p
>> $ git commit --amend # or --fixup=<commit> for later rebasing..
>> <repeat last steps 0-20 times for each patch>
>> # Allright, now we can submit it!
>> $ mkdir outgoing # Not really necessary, but easier to "clean".
>> $ git format-patch --cover-letter -n origin/master -o outgoing/
>> $ edit outgoing/0000-cover-letter.patch
>> # Cover letter can be omitted, but is a good way to give some background
>> # info, raise questions, etc. Now, let's send it to open a bug report.
>> $ git send-email --to address@hidden outgoing/0000-cover-letter.patch
>> # Now we have a bug URL! Let's send the remainder there.
>> $ rm outgoing/0000-cover-letter.patch
>> $ git send-email --to address@hidden outgoing/*.patch
>>
>> You can also make ~/.config/guix/latest a soft link to your git checkout
>> and largely avoid the need for `./pre-inst-env`. I don't actually do
>> that on my main development machine, since I need the `guix` command to
>> always work, and my work tree is rarely "sane" :P instead, I manage my
>> entire profile through `./pre-inst-env` and run `guix pull` once per
>> week or so. I've been meaning to try git-worktree(1) instead.
>>
>> Hope it helps! Always interesting to see other workflows :)
>>

-- 




reply via email to

[Prev in Thread] Current Thread [Next in Thread]