diff --git a/.gitignore b/.gitignore
index 5dacf122147b9afd66b06f306a63e92ee2493199..69f94e2ea024bd03ea3e28f3cdd1ce1a75326e42 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,2 +1,2 @@
 /pjls
-/config.json
+/config.conf
diff --git a/cmd/pjls/pjls.go b/cmd/pjls/pjls.go
index f594c53f8e6cda3191ad4c53eac02d24cbc80b6d..ff7c5865ce167ee9605f84b7efbde9f8b85baf3a 100644
--- a/cmd/pjls/pjls.go
+++ b/cmd/pjls/pjls.go
@@ -2,6 +2,8 @@ package main
 
 import (
 	"fmt"
+	"os"
+
 	"github.com/spf13/viper"
 	gl "github.com/xanzy/go-gitlab"
 )
@@ -11,20 +13,70 @@ type Config struct {
 	baseurl string
 }
 
-func main() {
-	var c Config
-
-	viper.SetConfigName("config")
-	viper.AddConfigPath(".")
-	viper.SetConfigType("json")
-	err := viper.ReadInConfig()
-	c.token = viper.Get("token")
-	c.baseurl = viper.Get("baseurl")
+func ReadConfig(conf string) *Config {
+	f, err := os.Open(conf)
+	if err != nil {
+		panic(fmt.Errorf("failed to parse config file %s", err))
+	}
+	defer f.Close()
+	viper.SetConfigType("hcl")
+	err = viper.ReadConfig(f)
+	c := &Config{
+		token:   viper.GetString("token"),
+		baseurl: viper.GetString("baseurl"),
+	}
 
 	if err != nil {
 		panic(fmt.Errorf("Fatal error config file: %s \n", err))
 	}
+
+	return c
+}
+
+func newProjectList(client *gl.Client) func() (*gl.Project, error) {
+	i := 0
+	opt := &gl.ListProjectsOptions{
+		ListOptions: gl.ListOptions{
+			Page:    1,
+			PerPage: 20,
+		},
+		Archived:   nil,
+		OrderBy:    nil,
+		Sort:       nil,
+		Search:     nil,
+		Simple:     nil,
+		Visibility: nil,
+	}
+	projects, resp, err := client.Projects.ListProjects(opt)
+
+	return func() (*gl.Project, error) {
+		if projects != nil && i >= len(projects) {
+			if resp.NextPage == 0 {
+				return nil, nil
+			}
+			opt.ListOptions.Page++
+			i = 0
+			projects, resp, err = client.Projects.ListProjects(opt)
+		}
+		if err == nil {
+			i++
+			return projects[i-1], nil
+		} else {
+			return nil, err
+		}
+	}
+}
+
+func main() {
+	c := ReadConfig("config.conf")
+
 	client := gl.NewClient(nil, c.token)
 	client.SetBaseURL(c.baseurl)
-	fmt.Println("vim-go")
+
+	i := 0
+	gen := newProjectList(client)
+	for p, _ := gen(); p != nil; p, _ = gen() {
+		fmt.Printf("% 3d: %s / %s\n", i, p.Path, p.Name)
+		i++
+	}
 }